【问题标题】:converting ParquetFile to pandas Dataframe with a column with a set of string in python将 ParquetFile 转换为 pandas Dataframe,其中包含一个在 python 中包含一组字符串的列
【发布时间】:2018-06-15 08:29:12
【问题描述】:

我有一个镶木地板文件,它有一个包含几列的简单文件架构。我使用下面的代码将其读入 python

from fastparquet import ParquetFile
pf = ParquetFile('inout_files.parquet')

这运行正常,但是当我使用下面的代码将其转换为 pandas 时,出现以下错误:

df = pf.to_pandas()

错误是:

 NotImplementedError: Encoding 4

为了找到错误的来源,我运行了df=pf.to_pandas(columns=col_to_retrieve),分别添加了列,并注意到错误是从具有字符串列表的列之一引发的(例如 ("a","b","c"))作为列的每个单元格的值。

知道有 set(string) 类型的列,你知道如何将其转换为 pandas 吗?

【问题讨论】:

  • 可以使用pd.read_parquet 吗?
  • 谢谢@jezrael,但是当engine='fastparquet'时我得到同样的错误并且engine='pyarrow',我得到下面的错误,我认为它与同一列问题有关:pyarrow .lib.ArrowIOError:箭头错误:无效:BinaryArray 不能包含超过 2147483646 个字节,有 2147483775
  • 我很担心 :( 没有别的想法...
  • 我打开了issues.apache.org/jira/browse/PARQUET-1186,关于更优雅地处理具有非常大的二进制数据的列
  • 谢谢你

标签: python pandas fastparquet


【解决方案1】:

在重新阅读问题后,我担心我的答案可能不符合要求...

我遇到了一个非常大的数据框/镶木地板的相关问题并收到错误: “BinaryArray 不能包含超过 2147483646 个字节”。

看来fastparquet 可以毫无错误地读取我的大表,而 pyarrow 可以毫无问题地写入它们,只要我没有类别类型。所以这是我目前的解决方法,直到这个 issue 得到解决:

0) 取不带类别列的数据框并制作表格:

import pyarrow as pa    
table = pa.Table.from_pandas(df)

1) 使用 pyarrow.parquet 编写我的表格:

 import pyarrow.parquet as pq
 pq.write_table(table, 'example.parquet')

2) 使用 fastparquet 读取我的表格:

from fastparquet import ParquetFile 
pf = ParquetFile('example.parquet')

3) 使用 fastparquet 转换为 pandas:

df = pf.to_pandas()

【讨论】:

    猜你喜欢
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2021-07-23
    • 2013-11-26
    • 2022-10-13
    • 2021-08-30
    相关资源
    最近更新 更多