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

Lam*_*829 30 python statistics python-module dataset spss

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

Ott*_*rdo 17

我发布了一个python包"pyreadstat",它读取SPSS(sav,zsav和por),Stata和SAS文件.它是C库ReadStat的包装器,所以速度非常快.Readstat是R库Haven背面使用的库,它被广泛使用并且非常强大.

包装是自动包装的.它不需要使用R(不需要安装aditional应用程序),也不依赖于IBM dll或其他外部库.

例如,要读取SPSS sav文件,您将执行以下操作:

import pyreadstat

df, meta = pyreadstat.read_sav("/path/to/sav/file.sav")
Run Code Online (Sandbox Code Playgroud)

df是一个熊猫数据帧.Meta包含元数据,例如变量标签或值标签.read_sav读取sav和zsav(压缩)文件.旧的por(便携式)文件还有一个函数read_por.

你可以在这里找到它:https://github.com/Roche/pyreadstat


chl*_*chl 11

根据您的目的 - 使用rpy2中的 R相关命令处理数据,或切换到Python - @Spacedman在相关线程上提供解决方案可能很容易适应您的需求.

否则,Pandas包含一个方便的包装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
Run Code Online (Sandbox Code Playgroud)


Sav*_*nry 9

至于人们发现这以后(像我)的说明:pandas.rpy已被弃用,在(> 0.16)的注意熊猫的最新版本在这里.该页面包含有关更新使用该rpy2界面的代码的信息.

  • 谢谢你的分享.所以`com.convert_robj(rdf)`应该替换为`pandas2ri.ri2py(rdf)`.但是`com.robj.r('foreign :: read.spss("%s",to.data.frame = TRUE)'%filename)` (2认同)

San*_*ord 6

当你有pandas >= 0.25.0你现在终于可以做pd.read_spss()

# you need pandas >= 0.25.0 for this    
import pandas as pd
df = pd.read_spss('your_spss_file.sav')
Run Code Online (Sandbox Code Playgroud)

这有库pyreadstat 作为要求,因此您可能必须先安装它:

pip install pyreadstat
Run Code Online (Sandbox Code Playgroud)

关于pd.read_spss() 参数的额外信息:

参数
----------
path : string 或 Path
文件路径

usecols:类似列表,可选
返回列的子集。如果没有,则返回所有列。

convert_categoricals : bool,默认为 True
将分类列转换为 pd.Categorical。

返回
------- 数据


小智 3

但使用 IBM 库的好处是它们可以正确处理这种相当复杂的二进制文件格式。它们是免费的,可以减轻您为此格式编写代码的负担,并且许可证允许您重新分发它们。你还能问什么?