Pandas DataFrame с категориальными столбцами из файла Parquet с использованием read_parquet? - PullRequest
0 голосов
/ 17 февраля 2019

Я конвертирую большие файлы CSV в файлы Parquet для дальнейшего анализа.Я читаю данные CSV в Pandas и задаю столбец dtypes следующим образом

_dtype = {"column_1": "float64",
          "column_2": "category",
          "column_3": "int64",
          "column_4": "int64"}

df = pd.read_csv("data.csv", dtype=_dtype)

Затем выполняю дополнительную очистку данных и записываю данные в Parquet для последующего использования.

_parquet_kwargs = {"engine": "pyarrow",
                   "compression": "snappy",
                   "index": False}

df.to_parquet("data.parquet", **_parquet_kwargs)

Но когда я читаю данные в Pandas для дальнейшего анализа с использованием from_parquet, я не могу восстановить категорию dtypes.Следующее

df = pd.read_parquet("data.parquet")

приводит к DataFrame с object dtypes вместо желаемых category.

Кажется, что следующее работает как ожидалось

import pyarrow.parquet as pq

_table = (pq.ParquetFile("data.parquet")
            .read(use_pandas_metadata=True))

df = _table.to_pandas(strings_to_categorical=True)

однако я хотел бы знать, как это можно сделать с помощью pd.read_parquet.

Ответы [ 2 ]

0 голосов
/ 30 августа 2019

Это исправлено в Arrow 0.15, теперь следующий код сохраняет столбцы как категории (и производительность значительно выше):

import pandas

df = pandas.DataFrame({'foo': list('aabbcc'),
                       'bar': list('xxxyyy')}).astype('category')

df.to_parquet('my_file.parquet')
df = pandas.read_parquet('my_file.parquet')
df.dtypes
0 голосов
/ 03 марта 2019

У нас похожая проблема.При работе с многофайловым паркетом обходятся следующие моменты: при использовании документации Table.to_pandas () может иметь значение следующий код:

import pyarrow.parquet as pq
dft = pq.read_table('path/to/data_parquet/', use_pandas_metadata=True)
df = dft.to_pandas(categories=['column_2'] )

use_panadas_metadata работает дляdtype datetime64[ns]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...