본문 바로가기
기술스택을 쌓아보자/Python

[pandas/parquet] pandas 가이드중 parquet 관련 부분 공부 및 번역

by 소리331 2021. 8. 3.
반응형

해당 글을 만들게 된 이유:

- DataFrame을 변환하다보니, 어느순간 유실되는 데이터들이 발생하더라구요. 그래서 근본부터 공부해보기로 했습니다.

아래 문서에서 parquet과 관련된 문서만 모았습니다!

 

IO tools (text, CSV, HDF5, …) — pandas 1.3.1 documentation

The pandas I/O API is a set of top level reader functions accessed like pandas.read_csv() that generally return a pandas object. The corresponding writer functions are object methods that are accessed like DataFrame.to_csv(). Below is a table containing av

pandas.pydata.org

IO tools (text, CSV, HDF5, …)

pandas의 I/O API pandas.read_csv 처럼 파일을 읽고 판다스 객체를 반환하는 최상위 reader함수들의 모음집입니다. df.to_csv()처럼 writer 함수들 또한 모여 있습니다. 

df를 parquet으로 변환하고 읽어드리는 함수

 

Parquet

Apache Parquet 은 데이터프레임을 위해 partitioned binary columnar serialization을 제공합니다. 이는 데이터프레임을 효율적으로 읽고 쓰기 위함이며, 다양한 데이터 분석 언어들 간에 공유가 쉽게 하기 위함입니다. Parquet은 파일 사이즈를 줄이고, 읽기 성능을 상향 시키기 위해 다양한 압축 방식을 제공합니다. Parquet은 데이터 프레임을 serialize하고 de-serialize 하기 위해 설계되어 있으며, pandas의 모든 데이터 타입을 지원합니다. 이는 타임존 정보를 가지고 있는 datetime처럼 확장된 데이터 타입도 포합됩니다.

아래는 주의사항입니다.

  • col 타입은 항상 string이어야 하고, col 이름은 중복될 수 없습니다.
  • pyarrow 를 엔진으로 사용하는 경우 index가 output에 나오지만, fastparquet은 non-default indexes를 반환합니다.(인덱스를 반환하지 않는다는 뜻). 이 경우 열이 하나가 추가로 생기는 것이기 때문에, pandas에 익숙하지 않은 사용자들은 당황할 수 있습니다. 함수에 index 인자를 추가하면 반환됩니다.(그러나 0.24.0버전 이전에는 해당 인자가 없습니다 ㅠ)
  • index level 이름은 만약 있다면 str 타입이어야 합니다.
  • 만약 pyarrow 를 엔진으로 사용한다면, 스트링 타입이 아닌 명목적 데이터에 대해 parquet으로 serialized 하는 것은 가능하지만, de-serialize 하는 것은 해당 데이터의 타입으로 반환됩니다.
  • pyarrow 엔진은 문자열 유형과 함께 범주형 dtype의 순서 플래그를 유지합니다. fastparquet은 정렬된 플래그를 보존하지 않습니다.
  • 지원되지 않는 유형에는 interval 및 실제 Python 개체 유형이 포함됩니다. 이렇게 하면 직렬화 시도 시 유용한 오류 메시지가 표시됩니다. interval 유형은 pyarrow >= 0.16.0에서 지원됩니다.
  • pyarrow 엔진은 null 가능 정수 및 문자열 데이터 유형(pyarrow >= 0.16.0)과 같은 확장 데이터 유형을 보존하고 필요한 프로토콜을 구현하려면 확장 유형이 필요합니다(확장 유형 설명서 참조).
주의사항
- 각각의 엔진들은 거의 유사한 결과를 보여줍니다. 그러나 현재 pyarrow는 timedelta data를 지원하지 않으며, fastparquet은 >0.1.4 버전 이상에서만 타임존을 지원합니다. 라이브러리는 또한 내제되어 사용되는 패키지마다 dependency가 생길 수 있습니다.(fastparquet은 numba를 사용하는 반면 pyarrow는 c-library를 사용합니다)

 

반응형

댓글