2016-03-29 18 views
5

Sto cercando di lavorare su un file SPSS (.sav) utilizzando pandas. In assenza del programma SPSS, ecco quello che un tipico file assomiglia a una volta convertito in .csv:Come conservare le etichette quando il file SPSS (.sav) viene importato nei panda tramite rpy?

enter image description here

Su indagine quali sono le prime due file significano (non so SPSS), sembra che la prima riga contiene lo Label s, mentre la seconda riga contiene lo VarName s.

enter image description here

Quando portare il file panda così:

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 

e poi fare una testa(), la prima fila (Label) è mancante:

enter image description here

Come possono essere mantenute le etichette?

risposta

3

etichette in un file sav sono memorizzati in variable.labels attributo dell'oggetto di ritorno dalla funzione read.spss.

È possibile ottenere le etichette di variabile con il seguente:

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 

Se si desidera impostare le etichette, come i nomi delle colonne della vostra dataframe:

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

Grandi, che sembra fare quello che bisogno, grazie. Suppongo che potrò quindi qualcuno con i panda inserire questi in intestazioni di colonna, sostituendo i valori varName. Ma è possibile fare la conversione ** e ** includere le etichette in una volta sola (una chiamata a 'com.robj.r()'), per salvare la consegna a fare ulteriori manipolazioni nei panda? – Pyderman

+1

È possibile leggere il file una volta e ottenere gli attributi sull'oggetto restituito, ma ciò richiederà una nuova chiamata r. Si prega di consultare l'aggiornamento. – ayhan

+0

Funziona bene, grazie. – Pyderman