2015-03-23 18 views
7

Ho un set di dati che ha poche colonne con dati categoriali.Panda: get_dummies vs categorico

Sto usando la funzione Categoriale per sostituire i valori categoriali con quelli numerici.

data[column] = pd.Categorical.from_array(data[column]).codes 

Ho recentemente eseguito la funzione pandas.get_dummies. Sono intercambiabili? C'è un vantaggio nell'usare l'uno sull'altro?

+1

Se si desidera solo per convertire i valori numerici per sklearn perché non [DictVectoriser] (http://scikit-learn.org/ stabili/modules/generate/sklearn.feature_extraction.DictVectorizer.html)? – EdChum

+1

Ad essere onesti, Ed, perché non sapevo esistesse :) –

+0

Probabilmente troverai che sklearn ha la maggior parte delle tue esigenze di elaborazione dei dati – EdChum

risposta

5

Perché si convertono i dati categoriali in numeri interi? Non credo che tu salvi la memoria se questo è il tuo obiettivo.

df = pd.DataFrame({'cat': pd.Categorical(['a', 'a', 'a', 'b', 'b', 'c'])}) 
df2 = pd.DataFrame({'cat': [1, 1, 1, 2, 2, 3]}) 

>>> df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 6 entries, 0 to 5 
Data columns (total 1 columns): 
cat 6 non-null category 
dtypes: category(1) 
memory usage: 78.0 bytes 

>>> df2.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 6 entries, 0 to 5 
Data columns (total 1 columns): 
cat 6 non-null int64 
dtypes: int64(1) 
memory usage: 96.0 bytes 

I codici categoriali sono solo valori interi per gli articoli univoci nella categoria specificata. Al contrario, get_dummies restituisce una nuova colonna per ogni oggetto unico. Il valore nella colonna indica se il record ha o meno quell'attributo.

>>> pd.core.reshape.get_dummies(df) 
Out[30]: 
    cat_a cat_b cat_c 
0  1  0  0 
1  1  0  0 
2  1  0  0 
3  0  1  0 
4  0  1  0 
5  0  0  1 

per ottenere i codici direttamente, è possibile utilizzare:

df['codes'] = [df.cat.codes.to_list()] 
+1

Grazie Alexander, sto preparando il set di dati per una regressione di Foresta casuale, quindi Ho bisogno che tutto sia numerico. In realtà risulta che get_dummies mi darà errori di memoria, mentre Categorical non sarà –

+0

Questa non è una risposta alla seconda parte della domanda, che è stata la parte chiave, credo: ho recentemente imbattuto in pandas.get_dummies funzione. Sono intercambiabili? C'è un vantaggio nell'usare l'uno sull'altro? – Geeocode

+0

La seconda parte della domanda non è una domanda di programmazione. Un algoritmo di apprendimento automatico interpreterà i dati categoriali in 'df2' come se fossero ordinati (ad esempio, il verde è maggiore del rosso). Indipendentemente dal fatto che ciò sia desiderabile dipende dal tuo caso d'uso. Per ovviare a questo problema, le variabili dummy (ovvero One-Hot-Encoding) creano nuove funzionalità per ciascuno degli elementi categoriali. – Alexander