我正在编写一个数据检查程序,用于审查spss文件,并需要以编程方式处理不同的检查。第一步是访问一个spss文件,将其转换为pandas dataframe,并从那里运行我的检查。我发现唯一可行的方法是通过RPY2来完成。不幸的是,我很少了解R语言,并且无法使下面两个解决方案生效。任何帮助/文献都将不胜感激。
我从其他帖子中提取了一些内容并创建了以下代码:
使用RPY2
from rpy2.robjects import pandas2ri
from rpy2.robjects import r
from pathlib import Path
import pyreadstat
pandas2ri.activate()
w = r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
df = pandas2ri.ri2py(w)
df.head()
w.head()
错误:
rpy2.rinterface_lib.embedded.RRuntimeError: Error in foreign::read.spss("path to test.sav", :
error reading system-file header
使用pyreadstat(这让我得到了列,但是当我尝试获取基础数据时出现错误)
meta = pyreadstat.read_sav(filename, metadataonly=True)
cols = [x for x in meta[0]]
df, meta = pyreadstat.read_sav(filename, usecols=cols)
print(df)
错误:
pyreadstat._readstat_parser.PyreadstatError: STRING type with value 4/23/19 17:50 with date type
更新:
现在使用 haven 但仍然出现错误:
rdf = r(f'haven::read_sav("{filename}")')
错误:
ValueError: 无效值 NaN(不是一个数字)