如何在通过rpy导入pandas的SPSS文件(.sav)时保留标签?

9
我希望能够使用pandas处理SPSS文件(.sav)。在没有SPSS程序的情况下,将其转换为.csv格式后,典型的文件如下所示:

enter image description here

在调查前两行的含义时(我不懂SPSS),似乎第一行包含了“标签”,而第二行包含了“变量名”。

enter image description here

当我这样将文件导入到pandas中:
import pandas.rpy.common as com

def savtocsv(filename):
    w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
    w = com.convert_robj(w)
    return w

然后执行head(),第一行(标签)会消失:

enter image description here

标签如何维护?

1个回答

6

sav文件中的标签存储在read.spss函数返回对象的variable.labels属性中。

您可以使用以下方法获取变量标签:

import pandas.rpy.common as com

def get_labels(filename):
    w = com.robj.r('attr(foreign::read.spss("%s"), "variable.labels")' % filename)
    w = com.convert_robj(w)
    return w

如果你想将标签设置为数据框的列名:

import pandas.rpy.common as com

def savtocsv(filename):
    w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
    cols = list(com.robj.r("attr")(w, "variable.labels"))
    w = com.convert_robj(w)
    w.columns = cols
    return w

太好了,这似乎是我需要的,谢谢。我想我可以用pandas将它们插入到列标题中,替换varName值。但是,有没有可能在一次调用com.robj.r()中完成转换并包含标签,以避免在pandas中进一步操作? - Pyderman
1
可以一次读取文件并在返回的对象上获取属性,但我认为这将需要另一个r调用。请参见更新。 - ayhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接