판다스에서 read_csv 로 csv 화일을 읽어올때,
import pandas as pd
df = pd.read_csv('filename.csv')
아래와 같이 DtypeWarning: Columns have mixed types 경고가 발생하는 경우가 있다.
Warning 가 발생하여도 이후 데이터를 읽지 못하는 것은 아니다.
<ipython-input-13-28597ed1d916>:8: DtypeWarning: Columns (5,6,9) have mixed types. Specify dtype option on import or set low_memory=False.
df = pd.read_csv('filename.csv')
원인은 Columns have mixed types 이란 표현 그대로,
데이터 유형이 혼합되어 있는 열(column)이 있다는 것을 의미한다.
판다스 데이터프레임은,
열마다 다른 데이터 타입을 가질 수 있다.
그러나 하나의 열은(즉 시리즈) 동일한 데이터 타입으로 이루어져야 한다.
이 Warning 의 경우,
5,6,9 열(컬럼)에 문자열이든, 정수든 혼재해 있어 발생하였다는 것이다.
두가지 해결 방법으로,
먼저 low_memory=False 옵션을 추가하는 것이다.
df = pd.read_csv('filename.csv', low_memory=False)
low_memory=False 옵션을 추가하여 Pandas에게 대용량 데이터에 대한 최적화를 수행하지 않도록 지시할 수 있다.
이는 메모리를 더 많이 사용할 수 있지만, 데이터 유형의 혼합으로 인한 경고를 방지할 수 있다.
다만, low_memory=False는 대용량 데이터에서 메모리 사용을 증가시킬 수 있으므로 주의가 필요하다.
판다스는 CSV 화일을 읽을때 열에 어떤 종류의 데이터가 저장되어 있는지 자동으로 파악합니다. 가령 '도서명'은 문자열로 인식하고 '대출건수'는 정수로 인식하는 식이죠. 그런데 메모리를 효율적으로 사용하기 위해 CSV 화일을 조금씩 나누어 읽습니다. 이때 자동으로 파악한 데이터 타입이 달라지면 경고가 발생합니다.
low_memory=False 로 지정하여 파일을 나누어 읽지 않고 한 번에 읽는 것입니다.
(출처 : 혼자공부하는 데이터 분석, 박해선 저)
두번째 해결 방법은,
열의 데이터를 자동으로 찾지 않도록 dtype 으로 데이터 타입을 지정하는 것이다.
df = pd.read_csv('filename.csv', dtype={'warning_컬럼명1': str, 'warning_컬럼명2': str, 'warning_컬럼명3': str})
위와 관련해서 잘 설명되어있는 '혼자 공부하는 데이터 분석(박해선 저)'의 설명을 들어보자.
low_memory 매개변수를 False 로 지정하면 경고는 발생하지 않지만, CSV 파일을 한번에 모두 읽기 때문에 많은 메모리를 사용합니다. CSV 파일이 아주 큰 경우 메모리 부족 오류가 발생할 수 있죠. low_memory 매개변수를 사용하지 않는 다른 방법은 열의 데이터 타입을 자동으로 찾지 않도록 아예 dtype 매개변수로 데이터 타입을 지정하는 것입니다.
(출처 : 혼자공부하는 데이터 분석, 박해선 저)
'데이터 분석 (with Python)' 카테고리의 다른 글
판다스 데이터프레임을 읽고 저장할때 인덱스 컬럼의 처리 (0) | 2024.01.31 |
---|---|
파일 인코딩 형식 확인 - chardet.detect() 함수 (0) | 2024.01.26 |
Python에서 Google Drive 파일 다운로드 (gdown 패키지) (0) | 2024.01.26 |