Python/NumPy | Pandas

[Python] Pandas - read_csv 컬럼 타입 지정

비번변경 2023. 4. 5. 21:35

개요

Pandas.read_csv 함수를 이용해 CSV 파일을 읽어 들이면 데이터의 타입을 추론하여 DataFrame을 생성한다. 그러다 보니 간혹 문자열로 저장한 네 자리 숫자의 형식이나 소수점 둘째 자리 등의 자릿수가 휘발될 때가 있다.

 

 

예시 코드

import numpy as np
import pandas as pd

map_code_message = [
    {'code':'00','return_message':'Continue'},
    {'code':'01','return_message':'Switching Protocol'},
    {'code':'02','return_message':'Processing'},
    {'code':'03','return_message':'Early Hints'},
]
df = pd.DataFrame(map_code_message)
print(df)

fname = 'map_code_message.csv'
df.to_csv(fname, index=False)
old_df = pd.read_csv(fname)
print(old_df)

 

실행 결과

df old_df

두 자리 숫자 형식이었던 code가 십진수로 변경된 것을 확인할 수 있다. 두 df의 데이터 타입을 확인하면 아래와 같다.

print('---df dtypes---')
print(df.dtypes)
print('---old_df dtypes---')
print(old_df.dtypes)

object Type이었던 code 컬럼의 타입을 int64로 읽어 들인 것을 알 수 있다.

 

이 글에서는 컬럼의 타입을 지정해 CSV 파일을 읽어 들이는 방법을 정리한다.

 

 

DataFrame 전체 데이터 타입 지정

Pandas.read_csv 함수에 dtype 매개변수로 데이터프레임의 타입을 지정할 수 있다. dtype 매개변수에 타입의 이름을 지정하면 된다. 데이터를 문자열로 읽어 들일 때는 object 또는 str로 지정한다.

타입의 이름을 지정하면 데이터프레임 전체의 타입을 지정하는 것과 같다.

import numpy as np
import pandas as pd

map_code_message = [
    {'code':'00','return_message':'Continue'},
    {'code':'01','return_message':'Switching Protocol'},
    {'code':'02','return_message':'Processing'},
    {'code':'03','return_message':'Early Hints'},
]
df = pd.DataFrame(map_code_message)
fname = 'map_code_message.csv'
df.to_csv(fname, index=False)

# dtype 지정
old_df = pd.read_csv(fname, dtype=object)
print(old_df)

 

실행 결과

df old_df old_df.dtypes

 

 

각 컬럼 타입 지정

Pandas.read_csv 함수의 dtype 매개변수에 데이터타입의 이름이 아니라, 컬럼명을 키로 하고 데이터타입의 이름을 값으로 하는 Dictionary를 지정하면 컬럼마다의 데이터 타입을 지정할 수 있다.

import numpy as np
import pandas as pd

map_code_message = [
    {'code':'00','return_message':'Continue'},
    {'code':'01','return_message':'Switching Protocol'},
    {'code':'02','return_message':'Processing'},
    {'code':'03','return_message':'Early Hints'},
]
df = pd.DataFrame(map_code_message)
fname = 'map_code_message.csv'
df.to_csv(fname, index=False)

# 컬럼 별 dtype 정의
df_dtype = {'code': 'object', 'return_message': 'str'}
old_df = pd.read_csv(fname, dtype=df_dtype)
old_df

 

실행 결과

df old_df old_df.dtypes

컬럼의 타입을 object로 지정하든, str로 지정하던 object 타입으로 인식하는 것을 확인할 수 있다.

 

 

참고 문서

https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

https://pandas.pydata.org/docs/user_guide/basics.html#basics-dtypes

https://frhyme.github.io/python-libs/pandas_read_csv_with_datatypes/

https://stackoverflow.com/questions/16988526/pandas-reading-csv-as-string-type