1

我编写了一个简单的代码来读取带有 pandas 的 read_csv 的 .csv(完全取决于 pandas 类型推断)。我收到错误消息:

arrow_table = pa.Table.from_pandas(df)"): Error converting to Python objects to String/UTF8

我在互联网上找不到任何有用的东西来解决这个问题。如何在 pyarrow.from_pandas(type= ...) 中使用 'type' 参数

谢谢你。

$ python pqwrite2.py

pyarrow version = 0.7.1

  from_size = 298877474 bytes

sys:1: DtypeWarning: Columns (23,28) have mixed types. Specify dtype option on import or set low_memory=False.
id                                   int64
...
pid                                 object
mnemonic                            object
supplier_key                       float64
generic                             object
trade_name                          object
description                         object
strength                            object
form                                object
ndc                                 object
note                                object
pack_size                          float64
pack_size_text                      object
pack_type                           object
route_description                   object
...
status                              object
hidden_flag                         object
updated                            float64
created_at                          object
updated_at                          object
medid                               object



dtype: object
write_to_parquet(df, parquet_output/h_billing_codes.SNAPPY.parquet, SNAPPY) ...
ERROR:root:2017-12-13 02:22:48 EXCEPTION IN (pqwrite2.py, LINE 23 "arrow_table = pa.Table.from_pandas(df)"): Error converting to Python objects to String/UTF8: Got Python object of type float but can only handle these types: str, bytes
2017-12-13 02:22:48 EXCEPTION IN (pqwrite2.py, LINE 23 "arrow_table = pa.Table.from_pandas(df)"): Error converting to Python objects to String/UTF8: Got Python object of type float but can only handle these types: str, bytes
4

3 回答 3

3

完整的错误信息是

Error converting to Python objects to String/UTF8: Got Python object of type float but can only handle these types: str, bytes

看起来有一列同时包含浮点值和字符串。pandas.read_csv用消息警告你DtypeWarning: Columns (23,28) have mixed types。大文件有时会发生这种情况。我建议为这些有问题的列指定一个显式类型,以便向 Arrow 提供所有相同类型的数据。

在 Arrow 的未来版本中,我们可能会支持在这种情况下生成“Union”类型的列,并使用一些函数来启用清理或转换其中一种有问题的类型(例如,您可以说“将所有不是字符串的内容转换为字符串”) ,但我不确定何时会实施。

于 2017-12-13T18:34:53.423 回答
0

我认为它是由 Pandasread_csv在读取大文件时引起的。期望 Pandas将 csv批量加载到内存中。这样做时,第一批中某些“str”(对象)列的机会被推断为“数字”类型。然后发生了错误。
正如@XValidted 所指出的,low_memory = False强制 Pandas 加载整行并制作正确的推断列类型。

于 2020-09-21T15:37:31.137 回答
0

我的脚本有相同的错误消息。读取错误消息输出的部分pqwrite.py

Specify dtype option on import or set low_memory=False.

我试过了:

import pandas as pd
import pyarrow as pa
df = pd.read_csv("FILENAME.csv", low_memory=False)
arrow_table = pa.Table.from_pandas(df)

kwargs low_memory=Falsefor使错误消失,因为它可以在读取文件时pd.read_csv更好地进行类型推断。df所以现在df没有混合类型的列。

我相信这low_memory=False可能会使阅读过程变慢并使用更多内存。

于 2018-01-09T21:25:58.440 回答