Konvertieren Sie mehrere Spalten eines pandas-Daten-frame zu dummy-Variablen - Python
Habe ich in diesem dataframe:
Soweit ich weiß, verwenden die scikit lernen-Paket in Python für die Maschine gelehnt Aufgaben, die kategoriale Variablen umgewandelt werden soll, um dummy-Variablen. Also, zum Beispiel mit einer Bibliothek scikit lernen ich versuchen, konvertieren Sie die Werte der Dritten Spalte, um dummy-Werte, aber mein code hat nicht funktioniert:
from sklearn.preprocessing import LabelEncoder
x[:, 2] = LabelEncoder().fit_transform(x[:,2])
Also, was ist Los mit meinem code? und Wie Kann ich umwandeln alle kategorialen Variablen um dummy-Variablen in meinen Daten-frame?
Edit: Der komplette traceback ist diese :
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-73-c0d726db979e> in <module>()
1 from sklearn.preprocessing import LabelEncoder
2
----> 3 x[:, 2] = LabelEncoder().fit_transform(x[:,2])
C:\Users\toshiba\Anaconda\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
2001 # get column
2002 if self.columns.is_unique:
-> 2003 return self._get_item_cache(key)
2004
2005 # duplicate columns
C:\Users\toshiba\Anaconda\lib\site-packages\pandas\core\generic.pyc in _get_item_cache(self, item)
665 return cache[item]
666 except Exception:
--> 667 values = self._data.get(item)
668 res = self._box_item_values(item, values)
669 cache[item] = res
C:\Users\toshiba\Anaconda\lib\site-packages\pandas\core\internals.pyc in get(self, item)
1653 def get(self, item):
1654 if self.items.is_unique:
-> 1655 _, block = self._find_block(item)
1656 return block.get(item)
1657 else:
C:\Users\toshiba\Anaconda\lib\site-packages\pandas\core\internals.pyc in _find_block(self, item)
1933
1934 def _find_block(self, item):
-> 1935 self._check_have(item)
1936 for i, block in enumerate(self.blocks):
1937 if item in block:
C:\Users\toshiba\Anaconda\lib\site-packages\pandas\core\internals.pyc in _check_have(self, item)
1939
1940 def _check_have(self, item):
-> 1941 if item not in self.items:
1942 raise KeyError('no item named %s' % com.pprint_thing(item))
1943
C:\Users\toshiba\Anaconda\lib\site-packages\pandas\core\index.pyc in __contains__(self, key)
317
318 def __contains__(self, key):
--> 319 hash(key)
320 # work around some kind of odd cython bug
321 try:
TypeError: unhashable type
- Sie sollten den vollständigen traceback-statt nur zu sagen "es hat nicht funktioniert". Ich vermute, das problem ist, dass das bilden von dummy-Variablen Ergebnisse in mehreren Spalten (eine für jeden eindeutigen Wert in der Spalte "original"), so kann man nicht zuordnen, zurück zu der ursprünglichen Spalte. Sie werden wahrscheinlich wollen, um einen neuen DataFrame mit Ihrem dummy-Spalten.
- In pandas Frage, ist es meist besser, wenn Sie Kopie-pastable version Ihrer DataFrame. Ich bevorzuge normalerweise die Ausgabe von
df.to_dict
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass die
LabelEncoder
Funktion wandelt Ihre Daten in dummy-Variablen (siehe scikit-learn.org/LabelEncoder), sondern schafft neue numerische labels für die variable.Ich die
get_dummies
Funktion von pandas, dies zu tun (siehe pandas.pydata.org/dummies). Unten ein einfaches Beispiel.Erstellen Sie eine einfache
DataFrame
mit kategorischen und numerischen DatenTransformieren von Daten in dummy-Variablen
Out[4]:
Beachten Sie, dass
Var1
umgewandelt wurde, um zwei dummy-Variablen, aber möchten Sie vielleicht, um alle drei Kategorien[a, b, c]
. Sie müssen die neue Kategorie hinzufügen.Und das Ergebnis:
Out[6]:
Hoffe, das hilft