Используя pyarrow
для преобразования pandas.DataFrame
, содержащего Player
объектов, в pyarrow.Table
со следующим кодом
import pandas as pd
import pyarrow as pa
class Player:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __repr__(self):
return f'<{self.name} ({self.age})>'
data = [
Player('Jack', 21, 'm'),
Player('Ryan', 18, 'm'),
Player('Jane', 35, 'f'),
]
df = pd.DataFrame(data, columns=['player'])
print(pa.Table.from_pandas(df))
мы получаем ошибку:
pyarrow.lib.ArrowInvalid: ('Could not convert <Jack (21)> with type Player: did not recognize Python value type when inferring an Arrow data type', 'Conversion failed for column 0 with type object')
Та же ошибка возникла при использовании
df.to_parquet('players.pq')
Возможно ли для pyarrow
отступить к сериализации этих Python объектов с использованием pickle
? Или есть лучшее решение? pyarrow.Table
в конечном итоге будет записан на диск с помощью Parquet.write_table()
.
- с использованием Python 3.8.0, pandas 0.25.3, пиарроу 0,13.0.
pandas.DataFrame.to_parquet()
не поддерживает мультииндекс, поэтому предпочтительным является решение, использующее pq.write_table(pa.Table.from_dataframe(pandas.DataFrame))
.
Спасибо!