2016-03-29 60 views
5

我正在尋找使用pandas來處理SPSS文件(.sav)。在沒有SPSS程序的,這裏有一個典型的文件看起來像轉換爲.csv時:如何在SPSS文件(.sav)通過rpy導入熊貓時保留標籤?

enter image description here

在調查的前兩行意味着什麼(我不知道SPSS),似乎第一行包含Label s,而第二行包含VarName s。

enter image description here

當我將文件放入熊貓這樣的:

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 

,然後做一個頭(),第一行(標籤)丟失:

enter image description here

標籤如何維護?

回答

3

標籤在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 
+0

大,似乎做什麼,我需要,謝謝。我想我可以然後用pandas把這些字段變成列標題,替換varName值。但是,是否有可能在轉換**和**中一次包含標籤(一次調用'com.robj.r()'),以節省處理以進一步操作熊貓? – Pyderman

+1

可以一次讀取文件並獲取返回對象的屬性,但它會需要另一個r電話,我認爲。請參閱更新。 – ayhan

+0

很好地工作,謝謝你。 – Pyderman