如何使用panda.read_sas以块为单位读取二进制压缩SAS文件并另存为羽毛

时间:2017-10-12 23:49:05

标签: python python-3.x pandas feather

我正在尝试使用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(最近一次调用   最后)in()         1 i = 1         2 for pj中的pdj:   ----> 3 fr.write_dataframe(pdj,' C:/ test' + str(i)+' .feather')         4 i = i + 1         5

     

〜\应用程序数据\本地\连续\ anaconda3 \ lib中\站点包\ pyarrow \ feather.py   在write_feather(df,dest)中       116 writer = FeatherWriter(dest)       117尝试:    - > 118 writer.write(df)       119除外:       120#尝试确保资源已关闭

     

〜\应用程序数据\本地\连续\ anaconda3 \ lib中\站点包\ pyarrow \ feather.py   在写(自我,df)        94        95 elif inferred_type不在[' unicode',' string']中:   ---> 96引发ValueError(msg)        97        98如果不是isinstance(name,six.string_types):

     

ValueError:无法使用dtype bytes

序列化名为SOME_ID的列0

我正在使用Windows 7和Python 3.6。当我检查它的大多数列'单元格包含在b'cell_value'中,我认为这意味着列是二进制格式。

我是一个完整的Python初学者,所以不明白这是什么问题?

1 个答案:

答案 0 :(得分:1)

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

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

  

限制

     

羽毛不支持熊猫的某些功能:

     

非字符串列名称

     

行索引

     

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