【问题标题】:pandas read_sas "ValueError: Length of values does not match length of index"pandas read_sas“ValueError:值的长度与索引的长度不匹配”
【发布时间】:2018-12-19 06:50:15
【问题描述】:

我需要一些帮助...我在 python 中使用 pandas 函数 read_sas 读取我的 sas 表时遇到了一些麻烦。我收到以下错误:

"ValueError: Length of values does not match length of index".

这是我运行的代码:

import pandas as pd

data=pd.read_sas("my_table.sas7bdat")
data.head()

我的 sas 表非常大,有 505 列和 100 000 行。

感谢大家的帮助。

【问题讨论】:

  • 嗯。也许尝试以增量方式读取文件? (设置块大小和迭代器变量。)在pandas.pydata.org/pandas-docs/stable/generated/… 上查看更多信息
  • 感谢您的回答,但这并不能解决问题。我找到了一个解决方案,将我的表格转换为 csv 并使用 pd.read_csv 读取它。
  • 确保数据集没有定义长度小于 8 字节的数值变量。当前版本的 read_sas 无法正确处理这些问题。

标签: pandas sas valueerror


【解决方案1】:

我对几个 sas 文件有同样的问题。我通过两种方式解决了它: 1.编码

df=pd.read_csv('foo.sas7bdat.csv', encoding='iso-8859-1')

2。在 Anaconda 中安装了 sas7bdat 库:

conda install -c prometeia/label/pytho sas7bdat

在python文件中:

from sas7bdat import SAS7BDAT
f=SAS7BDAT('foo.sas7bdat').to_data_frame()

【讨论】:

  • 谢谢。我可能会建议将这些分成两个答案。 encoding 方法对我来说失败了,但 sas7bdat 有效。
【解决方案2】:

我找到的一个解决方案是将我的 sas 表导出为 csv 文件,代码如下:

proc export data=my_table
   outfile='c:\myfiles\my_table.csv'
   dbms=csv
   replace;
run;

之后,我使用 pandas 函数 read_csv 读取我刚刚创建的 csv 文件:

import pandas as pd

data=pd.read_csv("my_table.csv")

data.head()

希望这可能会有所帮助。

【讨论】:

  • 如果您在 SAS 中没有导出到 csv 的选项,您是否也设法找到了解决方案?
  • 我只尝试以 csv 格式导出抱歉...也许您可以尝试以 txt 格式导出您的 SAS 表并使用 pandas.read_table() 读取它
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2021-12-28
  • 2022-01-13
  • 1970-01-01
  • 2016-08-31
相关资源
最近更新 更多