Как установить тип данных ‘category’ для столбца таблицы pyarrow?

#python #parquet #pyarrow

#python #паркет #pyarrow

Вопрос:

Я понимаю, что можно сохранить category тип при записи pandas DataFrame в файл parquet, используя to_parquet .

В начале, в моем случае, у меня уже есть pyarrow Table . Могу ли я задать для одного из его столбцов category тип? Если да, то как? (Я не смог найти подсказку в документации Google и pyarrow)

Спасибо за любую помощь! Лучшие,

Ответ №1:

В pyarrow категориальный тип называется «словарным типом». Массив pyarrow может быть преобразован в такой тип с помощью dictionary_encode() метода:

 >>> import pyarrow as pa
>>> table = pa.table({'a': ['A', 'B', 'A']})
>>> table.schema
a: string

>>> table.column('a')
<pyarrow.lib.ChunkedArray object at 0x7f1f94fb9938>
[
  [
    "A",
    "B",
    "A"
  ]
]

>>> table.column('a').dictionary_encode()
<pyarrow.lib.ChunkedArray object at 0x7f1f94fb9b48>
[

  -- dictionary:
    [
      "A",
      "B"
    ]
  -- indices:
    [
      0,
      1,
      0
    ]
]
  

Затем изменить таблицу с помощью этого вновь закодированного столбца немного сложнее, но это можно сделать с помощью:

 >>> table2 = table.set_column(0, "a", table.column('a').dictionary_encode())
>>> table2.schema
a: dictionary<values=string, indices=int32, ordered=0>

  

Комментарии:

1. Большое спасибо, Джорис! Возможно, есть ли способ сделать это при создании таблицы из массивов pyarrow?

2. pa.table({'a': pa.array(['A', 'B', 'A'], pa.string()).dictionary_encode()})