将架构设置为pa.Table.from_pandas()

时间:2018-03-29 22:08:38

标签: python pandas parquet pyarrow

使用pyArrow将pandas.DF转换为镶木地板时出现此错误:

ArrowInvalid('Error converting from Python objects to Int64: Got Python object of type str but can only handle these types: integer

为了找出哪个列是问题,我在for循环中创建了一个新的df,首先是第一列,每个循环添加另一列。我意识到错误位于dtype: object的列中,以0开头,我猜这就是为什么pyArrow想要将列转换为int但是因为其他值为UUID

我试图传递一个架构:(不确定这是否可行)

table = pa.Table.from_pandas(df, schema=schema, preserve_index=False)

架构为:df.dtypes

1 个答案:

答案 0 :(得分:2)

Carlos您是否尝试将列转换为此处列出的一种pandas类型https://arrow.apache.org/docs/python/pandas.html

你可以发布df.dtypes的输出吗?

如果更改pandas列类型没有帮助,您可以定义要传入的pyarrow模式。

fields = [
    pa.field('id', pa.int64()),
    pa.field('secondaryid', pa.int64()),
    pa.field('date', pa.timestamp('ms')),
]

my_schema = pa.schema(fields)

table = pa.Table.from_pandas(sample_df, schema=my_schema, preserve_index=False)

此处提供更多信息:

https://arrow.apache.org/docs/python/data.html https://arrow.apache.org/docs/python/generated/pyarrow.Table.html#pyarrow.Table.from_pandas https://arrow.apache.org/docs/python/generated/pyarrow.schema.html