是否有用于打开IBM SPSS(即.sav)文件的Python模块?如果最新的东西不需要任何额外的DLL文件/库,那就太好了。
答案 0 :(得分:15)
我发布了一个python包“ pyreadstat”,该包读取SPSS(sav,zsav和por),Stata和SAS文件。它是C库ReadStat的包装,因此非常快。 Readstat是在R库Haven后面使用的库,该库被广泛使用并且非常可靠。
该包装是自动包装的。它不需要使用R(不需要安装附加应用程序),并且不依赖于IBM dll或其他外部库。
例如,要读取SPSS sav文件,您需要执行以下操作:
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/sav/file.sav")
df是熊猫数据框。元包含诸如变量标签或值标签之类的元数据。 read_sav读取sav和zsav(压缩)文件。还有一个针对旧por(便携式)文件的read_por函数。
您可以在这里找到它:https://github.com/Roche/pyreadstat
答案 1 :(得分:11)
根据您的目的 - 使用rpy2中与R相关的命令处理数据,或切换到Python - 相关线程上的solution provided by @Spacedman可能很容易适应您的需求。
否则,Pandas包含convenient wrapper for rpy2
。以下是与Peat和Barton的weights.sav
数据集一起使用的示例:
>>> import pandas.rpy.common as com
>>> filename = "weights.sav"
>>> w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
>>> w = com.convert_robj(w)
>>> w.head()
ID WEIGHT LENGTH HEADC GENDER EDUCATIO PARITY
1 L001 3.95 55.5 37.5 Female tertiary 3 or more siblings
2 L003 4.63 57.0 38.5 Female tertiary Singleton
3 L004 4.75 56.0 38.5 Male year12 2 siblings
4 L005 3.92 56.0 39.0 Male tertiary One sibling
5 L006 4.56 55.0 39.5 Male year10 2 siblings
答案 2 :(得分:9)
作为人们对此结果的注释(与我一样):pandas.rpy
已在最新版本的pandas(> 0.16)中弃用,如上所述here。该页面包含有关更新代码以使用rpy2
界面的信息。
答案 3 :(得分:3)
但使用IBM库的好处是他们能够正确地获得这种相当复杂的二进制文件格式。它们是免费的,减轻了为此格式编写代码的负担,许可证允许您重新分发它们。还有什么可以问的?
答案 4 :(得分:3)
以下是您可能感兴趣的套餐
答案 5 :(得分:2)
我和@Pyderman有同样的问题,关于如何更新pandas(> 0.16)。这就是我想出的:
from rpy2.robjects import pandas2ri, r
filename = 'weights.sav'
w = r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
df = pandas2ri.ri2py(w)
df.head()
答案 6 :(得分:1)
当您拥有熊猫> = 0.25.0 时,您现在终于可以做到了:
# you need pandas >= 0.25.0 for this
import pandas as pd
df = pd.read_spss('your_spss_file.sav')
这需要库 pyreadstat ,因此您可能必须先安装该库:
pip install pyreadstat
我还没有在pd.read_spss()上找到文档,因此这里是有关pd.read_spss()的参数的更多信息:
参数
----------
路径:字符串或路径
文件路径
usecols :类似列表,可选
返回列的子集。如果为None,则返回所有列。
convert_categoricals :bool,默认值为True
将分类列转换为pd.Categorical。
退货
-------
DataFrame
答案 7 :(得分:0)
也许你会觉得这很有用:http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/
答案 8 :(得分:0)
您可以使用python interface to R,然后使用read.spss
中的library(foreign)
导入数据。
答案 9 :(得分:0)
导入 pyreadstat 作为 pr
将熊猫导入为 pd
pd.read_spss("你的路径和文件名")
#确保是 .sav
#它会返回一个数据框
#确保你已经安装了pyreadstat