Ich habe einen Pandas-Datenrahmen mit Tonnen von kategorialen Spalten, die ich im Entscheidungsbaum mit Scikit-Learn verwenden möchte. Ich muss sie in numerische Werte konvertieren (nicht einen heißen Vektor). Ich kann es mit LabelEncoder von scikit-learn machen. Das Problem ist, dass es zu viele davon gibt und ich sie nicht manuell konvertieren möchte.
Was wäre ein einfacher Weg, um diesen Prozess zu automatisieren.
scikit-learn
pandas
categorical-data
labels
user1700890
quelle
quelle
Antworten:
Wenn Ihre kategorialen Spalten derzeit Zeichen / Objekte sind, können Sie Folgendes verwenden:
Wenn Sie in der Lage sein müssen, zu den Kategorien zurückzukehren, würde ich ein Wörterbuch erstellen, um die Codierung zu speichern. etwas wie:
Wenn Sie Juliens mcve verwenden, wird Folgendes ausgegeben:
quelle
object
Spalten ist sehr nützlich.Lassen Sie uns zunächst ein mcve erstellen, mit dem Sie spielen können:
Jetzt können wir pd.get_dummies verwenden , um die ersten drei Spalten zu codieren.
Beachten Sie, dass ich den
drop_first
Parameter verwende, daN-1
Dummies ausreichen, um dieN
Möglichkeiten vollständig zu beschreiben (z. B. wenna_Var2
unda_Var3
0 sind, dann ist esa_Var1
). Außerdem spezifiziere ich speziell die Spalten, muss dies aber nicht, da es sich entweder um Spalten mit dtypeobject
odercategorical
(weiter unten) handelt.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=category
und Sie könnencolumns=df.columns[df.dtypes == 'category']
an übergebenget_dummies
.Andernfalls schlage ich vor, die
dtype
Anzahl aller anderen Spalten entsprechend festzulegen (Hinweis: pd.to_numeric, pd.to_datetime usw.), und esobject
verbleiben Spalten mit einem d- Typ, die Ihre kategorialen Spalten sein sollten.Die Parameterspalten pd.get_dummies lauten standardmäßig wie folgt:
quelle
Um Typen mehrerer Spalten gleichzeitig zu konvertieren, würde ich Folgendes verwenden:
Dann würde ich mich ihnen wieder anschließen
original df
.quelle
df2[df2.columns] = df2[df2.columns].astype('category')
macht das gleiche, neinapply
, neinlambda
.