有没有Python模块可以打开SPSS文件?
有没有一个Python模块可以打开IBM SPSS的文件(也就是.sav文件)?如果有一个最新的模块,而且不需要额外的dll文件或库,那就太好了。
9 个回答
根据你想做的事情,如果你想用R相关的命令处理数据,可以使用rpy2,或者你也可以选择切换到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
当你的 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')
这个功能需要一个叫 pyreadstat 的库,所以你可能需要先安装它:
pip install pyreadstat
关于 pd.read_spss() 的一些参数的额外信息:
参数
----------
path : 字符串或路径
文件的路径usecols : 类似列表的,选填
返回某些列的子集。如果不填,返回所有列。
convert_categoricals : 布尔值,默认是 True
将分类列转换为 pd.Categorical 类型。返回值
-------
数据框(DataFrame)
我发布了一个叫“pyreadstat”的Python包,它可以读取SPSS(sav、zsav和por格式)、Stata和SAS文件。这个包是基于一个叫ReadStat的C语言库,所以它运行得非常快。ReadStat是R语言库Haven背后的库,Haven在数据处理方面非常流行且稳定。
这个包是自包含的。也就是说,你不需要使用R(不需要安装额外的应用程序),也不依赖于IBM的dll文件或其他外部库。
比如,如果你想读取一个SPSS的sav文件,你可以这样做:
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/sav/file.sav")
这里的df是一个pandas数据框,Meta包含一些元数据,比如变量标签或数值标签。read_sav可以读取sav和zsav(压缩格式)文件。还有一个函数read_por可以读取旧的por(便携式)文件。
你可以在这里找到它:https://github.com/Roche/pyreadstat