3

我正在尝试以pandas.read_sas()块的形式读取二进制压缩的 SAS 文件,并将每个块保存为单独的羽毛文件。

这是我的代码

import feather as fr
import pandas as pd

pdi = pd.read_sas("C:/data/test.sas7bdat", chunksize = 100000, iterator = True)

i = 1
for pdj in pdi:
    fr.write_dataframe(pdj, 'C:/data/test' + str(i) + '.feather')
    i = i + 1

但是我收到以下错误

ValueError Traceback (last last call last) in () 1 i = 1 2 for pdj in pdi: ----> 3 fr.write_dataframe(pdj, 'C:/test' + str(i) + '.feather') 4 我 = 我 + 1 5

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pyarrow\feather.py in write_feather(df, dest) 116 writer = FeatherWriter(dest) 117 try: --> 118 writer.write(df) 119 except : 120 # 尝试确保资源已关闭

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pyarrow\feather.py in write(self, df) 94 95 elif inferred_type not in ['unicode', 'string']: ---> 96 raise ValueError(msg) 97 98 if not isinstance(name, Six.string_types):

ValueError:无法使用 dtype 字节序列化名为 SOME_ID 的列 0

我正在使用 Windows 7 和 Python 3.6。当我检查它时,大多数列的单元格都被包裹在b'cell_value'其中,我假设这些列是二进制格式的。

我是一个完整的 Python 初学者,所以不明白问题出在哪里?

4

1 回答 1

1

编辑:看起来这是最近版本中修补的错误: https ://issues.apache.org/jira/browse/ARROW-1672 https://github.com/apache/arrow/commit/238881fae8530a1ae994eb0e283e4783d3dd2855

列名是字符串吗?你确定 pdj 的类型是 pd.DataFrame 吗?

限制

在 Feather 中不支持 pandas 的某些功能:

非字符串列名

行索引

具有非同质数据的对象类型列

于 2017-11-18T23:42:44.487 回答