【问题标题】:How to preserve Labels when SPSS file (.sav) imported into pandas via rpy?SPSS文件(.sav)通过rpy导入熊猫时如何保留标签?
【发布时间】:2016-07-17 05:21:21
【问题描述】:

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

调查前两行的含义(我不知道 SPSS),似乎第一行包含Labels,而第二行包含VarNames。

当我将文件带入 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(),第一行(Label)不见了:

如何维护标签?

【问题讨论】:

    标签: python r pandas spss rpy2


    【解决方案1】:

    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()),以节省在熊猫中进行进一步操作的手?
    • 可以读取一次文件并获取返回对象的属性,但我认为这需要另一个 r 调用。请查看更新。
    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多