Ho un frame dati panda che ha alcune righe e colonne. Ogni colonna ha un'intestazione. Ora finché continuo a fare operazioni di manipolazione dei dati nei panda, le mie intestazioni variabili vengono mantenute. Ma se provo qualche funzione di pre-elaborazione dei dati di Sci-kit-learn lib, finisco per perdere tutte le mie intestazioni e il frame viene convertito in una matrice di numeri.Come mantenere le intestazioni delle colonne del frame di dati dopo Pre-processing in scikit-learn
Capisco perché succede perché scikit-learn fornisce un ndarray insipido come output. E ndarray insensato essendo solo matrice non avrebbe nomi di colonne.
Ma ecco la cosa. Se sto costruendo un modello sul mio set di dati, anche dopo la pre-elaborazione dei dati iniziali e la prova di alcuni modelli, potrei dover eseguire altre attività di manipolazione dei dati per eseguire altri modelli per una migliore corrispondenza. Senza essere in grado di accedere all'intestazione della colonna è difficile eseguire la manipolazione dei dati in quanto potrebbe non sapere qual è l'indice di una particolare variabile, ma è più facile ricordare il nome della variabile o persino cercare df.columns.
Come superare questo?
EDIT1: modifica con snapshot dei dati di esempio.
Pclass Sex Age SibSp Parch Fare Embarked
0 3 0 22 1 0 7.2500 1
1 1 1 38 1 0 71.2833 2
2 3 1 26 0 0 7.9250 1
3 1 1 35 1 0 53.1000 1
4 3 0 35 0 0 8.0500 1
5 3 0 NaN 0 0 8.4583 3
6 1 0 54 0 0 51.8625 1
7 3 0 2 3 1 21.0750 1
8 3 1 27 0 2 11.1333 1
9 2 1 14 1 0 30.0708 2
10 3 1 4 1 1 16.7000 1
11 1 1 58 0 0 26.5500 1
12 3 0 20 0 0 8.0500 1
13 3 0 39 1 5 31.2750 1
14 3 1 14 0 0 7.8542 1
15 2 1 55 0 0 16.0000 1
Quanto sopra è fondamentalmente il frame di dati panda. Ora quando lo faccio su questo frame di dati si spogliano le intestazioni delle colonne.
from sklearn import preprocessing
X_imputed=preprocessing.Imputer().fit_transform(X_train)
X_imputed
I nuovi dati sono di tipo numpy e quindi i nomi delle colonne vengono eliminati.
array([[ 3. , 0. , 22. , ..., 0. ,
7.25 , 1. ],
[ 1. , 1. , 38. , ..., 0. ,
71.2833 , 2. ],
[ 3. , 1. , 26. , ..., 0. ,
7.925 , 1. ],
...,
[ 3. , 1. , 29.69911765, ..., 2. ,
23.45 , 1. ],
[ 1. , 0. , 26. , ..., 0. ,
30. , 2. ],
[ 3. , 0. , 32. , ..., 0. ,
7.75 , 3. ]])
così voglio conservare i nomi delle colonne quando faccio un po 'di manipolazione dei dati sul mio telaio dati panda.
Un esempio del codice Panda potrebbe essere più utile. Non Pandas fornisce un modo per estrarre i dati da una cornice e quindi sostituirli con una nuova copia? – hpaulj
@Manish: si prega di fornire un esempio molto semplice e riproducibile! Un dataframe a tre righe renderebbe la tua domanda più comprensibile. (Forse copiare semplicemente 'saved_cols = df.columns' e poi riassegnarlo al' df' modificato farebbe il trucco, ma non sono sicuro che sia ciò di cui hai bisogno) – cd98
Infatti, come dice @ cd98, copia di 'saved_cols = df .columns' e poi quando hai ottenuto la serie, facendo 'pandas.DataFrame (series, saved_cols)' ottieni il tuo dataframe. Lo faccio per esempio quando uso 'train_test_split', che restituisce un' numpy ndarray', ma ho bisogno di usarlo come un dataframe. Non è qualcosa di cui essere particolarmente orgoglioso, ma secondo me è abbastanza buono. – lrnzcig