Python 当SPSS文件(.sav)通过rpy导入熊猫时,如何保留标签?

Python 当SPSS文件(.sav)通过rpy导入熊猫时,如何保留标签?,python,r,pandas,spss,rpy2,Python,R,Pandas,Spss,Rpy2,我希望使用pandas处理SPSS文件(.sav)。在没有SPSS程序的情况下,以下是转换为.csv时典型文件的外观: 在调查前两行的含义时(我不知道SPSS),第一行似乎包含标签s,而第二行包含VarNames 当我将该文件放入文件时: import pandas.rpy.common as com def savtocsv(filename): w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % fil

我希望使用
pandas
处理SPSS文件(.sav)。在没有SPSS程序的情况下,以下是转换为.csv时典型文件的外观:

在调查前两行的含义时(我不知道SPSS),第一行似乎包含
标签
s,而第二行包含
VarName
s

当我将该文件放入文件时:

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(),则缺少第一行(标签):

如何维护标签

  • 参考:
  • Python:2.7.10
  • 熊猫:0.17.1

sav
文件中的标签存储在函数返回对象的
变量.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

太好了,这似乎正是我需要的,谢谢。我想我可以让有人用这些作为列标题,替换varName值。但是,是否可以一次转换并包含标签(一次调用
com.robj.r()
),以节省在pandas中进行进一步操作的时间?可以读取一次文件并获取返回对象的属性,但我认为需要另一次r调用。请查看更新。