是否有用于打开SPSS文件的Python模块?

时间:2013-02-01 13:07:46

标签: python dataset statistics python-module spss

是否有用于打开IBM SPSS(即.sav)文件的Python模块?如果最新的东西不需要任何额外的DLL文件/库,那就太好了。

10 个答案:

答案 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)

答案 8 :(得分:0)

您可以使用python interface to R,然后使用read.spss中的library(foreign)导入数据。

答案 9 :(得分:0)

导入 pyreadstat 作为 pr

将熊猫导入为 pd

pd.read_spss("你的路径和文件名")

#确保是 .sav

#它会返回一个数据框

#确保你已经安装了pyreadstat