[Error] SchemaError: dtypes differ for column: Int64 != Float64
포스트
취소

[Error] SchemaError: dtypes differ for column: Int64 != Float64

원인

해당 에러는 polars.read_parquet()로 데이터를 한번에 불러올 때, 특정 컬럼이 파일 별로 intfloat로 다르게 지정되어 타입이 맞지 않는다는 의미입니다.

저의 경우, 데이터를 split해 전처리를 한 뒤 저장한 parquet 파일들을 polars.read_parquet()로 한번에 불러올 때 발생했습니다. 전처리 단계에서 타입이 많다 보니 타입을 직접 지정해서 변환하지 않고, try-except로 타입 변경 시 에러가 나지 않는 경우에 해당 타입으로 변경을 진행했기 때문입니다.

참고로 pandas에는 convert_dtypes()라는 메쏘드를 사용하면 (어느 정도) 자동으로 컬럼 타입을 지정하는 방법이 있지만, 사용하고 있는 polars 1.22.0 버전에는 그런 방법이 없어 보였습니다.

해결 방법

에러를 해결하기 위해 use_pyarrow=True 옵션을 지정해주면 됩니다.

1
2
3
4
5
# 변경 전
df = pl.read_parquet(parquet_file_list, allow_missing_columns=True)

# 변경 후
df = pl.read_parquet(parquet_file_list, allow_missing_columns=True, use_pyarrow=True)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[Error] ValueError: If using all scalar values, you must pass an index

[python] contextlib - contextmanager