2016-03-29 6 views
5

pandasを使用してSPSSファイル(.sav)で作業する予定です。 SPSSプログラムがない場合には、こちらを.csvに換算した場合の典型的なファイルは次のようになります。最初の2行が意味するものへの調査にrpyを使用してSPSSファイル(.sav)をpandasにインポートしたときにラベルを保存するにはどうすればいいですか?

enter image description here

(私はSPSSを知らない)、それはそうです最初の行にはLabelが含まれ、2番目の行にはVarNameが含まれています。

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

ラベル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

グレート、何をすべきと思われるI必要、ありがとう。私は、誰かがパンダを持っている人が、varName値を置き換えて、列ヘッダにすることができると思います。しかし、変換**と**は、パンダでさらに操作する手渡しを節約するために、ラベルを一度に(com.robj.r()に1回)呼び出すことが可能ですか? – Pyderman

+1

ファイルを一度読み取って返すオブジェクトの属性を取得することは可能ですが、別のr呼び出しが必要になります。アップデートをご覧ください。 – ayhan

+0

うまく動作します、ありがとうございました。 – Pyderman

関連する問題