닫기

PROFESSIONAL AI DEVELOPER CHAGAUN

고객지원

도움말

HOME 고객지원 도움말
[데이터프레임-사용법1] 기본사용법, 컬럼추가, 변경, 삭제 등
2022.04.18

안녕하세요, 차가운 운영자입니다.


pandas로부터 csv 파일을 읽인 dataframe의 행과 열을 컨트롤 하는 방법을 설명드립니다.

첨부파일 : example_using_dataframe_from_csv.py


#[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")




감사합니다.




data/2022/09/24/example_using_dataframe_from_dict.py

전체목록