안녕하세요, 차가운 운영자입니다.
pandas로부터 csv 파일을 읽인 dataframe의 행과 열을 컨트롤 하는 방법을 설명드립니다.
#[dataframe 옵션]
#inplace :True : '=' 을 사용하여 df를 새로 생성하지 않고 기존 df를 변경하고자 하는 경우 사용
import pandas as pd
# 리스트 데이터 생성
country = ['Korea', 'Australia', 'Japan', 'India', 'Russia', 'Morocco', 'Egypt']
mountain = ["kumgangsan", "dobongsan", "bukhansan", "bakdusan", "hanlasan", "jirisan", "soknisan"]
height = [809, 731, 588, 18, 200, 70, 45]
# 딕셔너리 생성
dict1 = {'country' : country}
dict2 = {'mountain' : mountain}
dict3 = {'height' : height}
# 딕셔너리로 데이터프레임 생성
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)
print(df1)
# country
# 0 Korea
# 1 Australia
# 2 Japan
# 3 India
# 4 Russia
# 5 Morocco
# 6 Egypt
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['country']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# 인덱스라벨 바꾸기 : 인덱스라벨을 0, 1, 2, 3, 4, 5, 6 으로 바꾸고자 하는 경우
df1.index = list(range(7))
print(df1)
# country
# 0 Korea
# 1 Australia
# 2 Japan
# 3 India
# 4 Russia
# 5 Morocco
# 6 Egypt
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['country']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# 비어있는 새로운 컬럼 생성하고자 하는 경우
colname = "capital"
if colname not in df1.columns: df1[colname] = [''] * len(df1)
print(df1)
# country capital
# 0 Korea
# 1 Australia
# 2 Japan
# 3 India
# 4 Russia
# 5 Morocco
# 6 Egypt
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['country', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# 인덱스라벨 바꾸기 : 인덱스라벨을 'KOR', 'AUS', 'JAP', 'IN', 'RU', 'MOR', 'EG' 으로 바꾸고자 하는 경우
row_labels = ['KOR', 'AUS', 'JAP', 'IN', 'RU', 'MOR', 'EG']
df1.index = row_labels
print(df1)
# country capital
# KOR Korea
# AUS Australia
# JAP Japan
# IN India
# RU Russia
# MOR Morocco
# EG Egypt
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['country', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 ['KOR', 'AUS', 'JAP', 'IN', 'RU', 'MOR', 'EG']
# 인덱스라벨을 첫번째 컬럼으로 전환하고자 하는 경우
df1.reset_index(inplace=True)
df1.rename({'index':'con'}, axis=1, inplace=True) # 첫번째 컬럼헤더변경('index'->'con')
print(df1)
# con country capital
# 0 KOR Korea
# 1 AUS Australia
# 2 JAP Japan
# 3 IN India
# 4 RU Russia
# 5 MOR Morocco
# 6 EG Egypt
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# csv 파일로 저장
csv_file = "c:\\temp\\cars.csv"
df1.to_csv(csv_file, index=False, encoding="utf-8")
# csv 파일 읽기
csv_file = "c:/temp/cars.csv"
df1 = pd.read_csv(csv_file, sep=",", encoding="utf-8")
df1.fillna('unknown', inplace=True) # 결측치(NaN)을 'unknown'로 변환
print(df1)
# con country capital
# 0 KOR Korea nuknown
# 1 AUS Australia nuknown
# 2 JAP Japan nuknown
# 3 IN India nuknown
# 4 RU Russia nuknown
# 5 MOR Morocco nuknown
# 6 EG Egypt nuknown
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# 첫번째 컬럼을 인덱스 라벨로 사용하고자 하는 경우(set_index(컬럼명))
df1.set_index(df1.columns[0], inplace=True)
print(df1)
# country capital
# con
# KOR Korea unknown
# AUS Australia unknown
# JAP Japan unknown
# IN India unknown
# RU Russia unknown
# MOR Morocco unknown
# EG Egypt unknown
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['country', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 ['KOR', 'AUS', 'JAP', 'IN', 'RU', 'MOR', 'EG']
# csv 파일 읽기 - 첫번째 컬럼을 index 라벨로 사용
df1 = pd.read_csv(csv_file, sep=",", index_col=0, encoding="utf-8")
df1.fillna('unknown', inplace=True) # 결측치(NaN)을 'unknown'로 변환
print(df1)
# country capital
# con
# KOR Korea unknown
# AUS Australia unknown
# JAP Japan unknown
# IN India unknown
# RU Russia unknown
# MOR Morocco unknown
# EG Egypt unknown
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['country', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 ['KOR', 'AUS', 'JAP', 'IN', 'RU', 'MOR', 'EG']
# csv 파일 읽기 - 두개의 데이터프레임을 열로 결합
df1 = pd.read_csv(csv_file, sep=",", encoding="utf-8")
df1.fillna('unknown', inplace=True) # 결측치(NaN)을 'unknown'로 변환
df1 = df1.join(df2, how='inner')
print(df1)
# con country capital mountain
# 0 KOR Korea unknown kumgangsan
# 1 AUS Australia unknown dobongsan
# 2 JAP Japan unknown bukhansan
# 3 IN India unknown bakdusan
# 4 RU Russia unknown hanlasan
# 5 MOR Morocco unknown jirisan
# 6 EG Egypt unknown soknisan
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'capital', 'mountain']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# 새로운 컬럼 추가
df1 = df1.join(df3, how='inner')
print(df1)
# con country capital mountain height
# 0 KOR Korea unknown kumgangsan 809
# 1 AUS Australia unknown dobongsan 731
# 2 JAP Japan unknown bukhansan 588
# 3 IN India unknown bakdusan 18
# 4 RU Russia unknown hanlasan 200
# 5 MOR Morocco unknown jirisan 70
# 6 EG Egypt unknown soknisan 45
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'capital', 'mountain', 'height']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [0, 1, 2, 3, 4, 5, 6]
# 첫번째 행 삭제
df1 = df1.drop(df1.index[0])
print(df1)
# con country capital mountain height
# 1 AUS Australia unknown dobongsan 731
# 2 JAP Japan unknown bukhansan 588
# 3 IN India unknown bakdusan 18
# 4 RU Russia unknown hanlasan 200
# 5 MOR Morocco unknown jirisan 70
# 6 EG Egypt unknown soknisan 45
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'capital', 'mountain', 'height']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [1, 2, 3, 4, 5, 6]
# 특정 컬럼 삭제(컬럼명을 지정하여 삭제, axis=1 : 컬럼)
df1 = df1.drop('mountain', axis=1)
print(df1)
# con country capital height
# 1 AUS Australia unknown 731
# 2 JAP Japan unknown 588
# 3 IN India unknown 18
# 4 RU Russia unknown 200
# 5 MOR Morocco unknown 70
# 6 EG Egypt unknown 45
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'capital', 'height']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [1, 2, 3, 4, 5, 6]
# 컬럼 순서 변경 방법
df1 = df1.loc[:, ["con", "country", "height", "capital"] ]
print(df1)
# con country height capital
# 1 AUS Australia 731 unknown
# 2 JAP Japan 588 unknown
# 3 IN India 18 unknown
# 4 RU Russia 200 unknown
# 5 MOR Morocco 70 unknown
# 6 EG Egypt 45 unknown
print('컬럼헤더', df1.columns.tolist())
# 컬럼헤더 ['con', 'country', 'height', 'capital']
print('인덱스라벨', df1.index.tolist())
# 인덱스라벨 [1, 2, 3, 4, 5, 6]
print("end of file")
감사합니다.