2016-03-29 8 views
5

Ich bin auf der Suche nach einer SPSS-Dateien (.sav) mit pandas. In Abwesenheit des Programms SPSS, hier ist es, was eine typische Datei aussieht, wenn in CSV konvertiert:Wie können Labels beibehalten werden, wenn SPSS-Dateien (.sav) über Rpy in Pandas importiert werden?

enter image description here

Auf in Untersuchung, was die ersten beiden Zeilen bedeuten (ich weiß nicht, SPSS), wie es scheint dass die erste Reihe die Label s enthält, während die zweite Reihe die VarName s enthält.

enter image description here

Wenn ich die Datei in Pandas bringen somit:

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 

und machen dann einen Kopf(), die erste Zeile (Label) fehlt:

enter image description here

Wie können Etiketten gepflegt werden?

Antwort

3

Labels in einer sav Datei werden in variable.labels Attribut des zurückkehrenden Objekt aus der Funktion read.spss gespeichert.

Sie können die Variablenlabels mit der folgenden erhalten:

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 

Wenn Sie die Etiketten als die Spaltennamen Ihrer Datenrahmen festlegen möchten:

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

Große, das, was zu tun scheint, ich brauch, danke. Ich denke, dass ich dann jemanden mit Pandas diese Spalten in die Spaltenköpfe einkeilen kann und die VarName-Werte ersetzen kann. Aber ist es möglich, dass die Umwandlung ** und ** die Beschriftungen auf einmal enthält (ein Aufruf von 'com.robj.r()'), um die Hand zu speichern, um weitere Manipulationen in Pandas zu machen? – Pyderman

+1

Es ist möglich, die Datei einmal zu lesen und die Attribute auf dem zurückkehrenden Objekt zu erhalten, aber es wird einen weiteren r-Aufruf erfordern, denke ich. Bitte beachten Sie das Update. – ayhan

+0

Funktioniert gut, danke Agin. – Pyderman

Verwandte Themen