Lassen Sie uns zunächst ein mcve erstellen, mit dem Sie spielen können:
import pandas as pd
import numpy as np
In [1]: categorical_array = np.random.choice(['Var1','Var2','Var3'],
size=(5,3), p=[0.25,0.5,0.25])
df = pd.DataFrame(categorical_array,
columns=map(lambda x:chr(97+x), range(categorical_array.shape[1])))
# Add another column that isn't categorical but float
df['d'] = np.random.rand(len(df))
print(df)
Out[1]:
a b c d
0 Var3 Var3 Var3 0.953153
1 Var1 Var2 Var1 0.924896
2 Var2 Var2 Var2 0.273205
3 Var2 Var1 Var3 0.459676
4 Var2 Var1 Var1 0.114358
Jetzt können wir pd.get_dummies verwenden , um die ersten drei Spalten zu codieren.
Beachten Sie, dass ich den drop_firstParameter verwende, da N-1Dummies ausreichen, um die NMöglichkeiten vollständig zu beschreiben (z. B. wenn a_Var2und a_Var30 sind, dann ist es a_Var1). Außerdem spezifiziere ich speziell die Spalten, muss dies aber nicht, da es sich entweder um Spalten mit dtype objectoder categorical(weiter unten) handelt.
In [2]: df_encoded = pd.get_dummies(df, columns=['a','b', 'c'], drop_first=True)
print(df_encoded]
Out[2]:
d a_Var2 a_Var3 b_Var2 b_Var3 c_Var2 c_Var3
0 0.953153 0 1 0 1 0 1
1 0.924896 0 0 1 0 0 0
2 0.273205 1 0 1 0 1 0
3 0.459676 1 0 0 0 0 1
4 0.114358 1 0 0 0 0 0
In Ihrer spezifischen Anwendung müssen Sie eine Liste der Spalten bereitstellen, die kategorisch sind, oder Sie müssen ableiten, welche Spalten kategorisch sind.
Im besten Fall hat Ihr Datenrahmen diese Spalten bereits mit einem dtype=categoryund Sie können columns=df.columns[df.dtypes == 'category']an übergeben get_dummies.
Andernfalls schlage ich vor, die dtypeAnzahl aller anderen Spalten entsprechend festzulegen (Hinweis: pd.to_numeric, pd.to_datetime usw.), und es objectverbleiben Spalten mit einem d- Typ, die Ihre kategorialen Spalten sein sollten.
Die Parameterspalten pd.get_dummies lauten standardmäßig wie folgt:
columns : list-like, default None
Column names in the DataFrame to be encoded.
If `columns` is None then all the columns with
`object` or `category` dtype will be converted.