【发布时间】:2018-12-31 09:05:00
【问题描述】:
我正在尝试将 Parquet 文件读入 Pandas 数据帧。使用下面的 API(或者即使我使用 pd.read_parquet() 包装器),我被ValueError buffer source array is read-only 击中。
在网上搜索了一下,似乎是 Cython 不支持只读缓冲区的问题,但是我找不到任何关于如何解决这个问题的解决方案。
当 API 抛出 ValueError 缓冲区源数组为只读时,如何将 Parquet 文件读入 Pandas 数据帧?
In [1]: import pandas as pd
...: import numpy as np
...: import pyarrow as pa
...: import pyarrow.parquet as pq
In [2]: table = pq.read_table('Parquet/Journal.parquet', columns=['SOURCE_CODE','YEAR','MONTH','AMOUNT'])
In [3]: df = table.to_pandas()
In [4]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 85326489 entries, 0 to 85326488
Data columns (total 4 columns):
AMOUNT float64
SOURCE_CODE category
YEAR category
MONTH category
dtypes: category(3), float64(1)
memory usage: 895.1 MB
In [5]: df.groupby(['SOURCE_CODE','YEAR','MONTH'])['AMOUNT'].sum()
【问题讨论】:
-
由于我们没有您的数据,因此验证行为并不容易。你能举一个独立的例子吗?
-
另外,您使用的是哪个版本的熊猫? Cython 自 0.28 起支持只读内存视图,因此重新发送的 pandas 版本不应有此限制(或者至少在您报告问题时可以轻松修复)。
-
我的熊猫版本是 0.23.4。 Cython 版本是 0.29.2。我是否需要为只读内存视图配置 cython?