2017-12-25 6 views
1

Ich benutze eine Pandas-Serie und versuche, es in eine Hot-Encodierung zu konvertieren. Ich verwende die describe Methode, um zu überprüfen, wie viele eindeutige Kategorien die Serie hat. Die Ausgabe lautet:Pandas get_dummies generiert mehrere Spalten für die gleiche Funktion

input['pattern'].describe(include='all') 

    count  9725 
    unique  7 
    top   1 
    freq  4580 
    Name: pattern, dtype: object 

Wenn ich versuche:

x = pd.get_dummies(input['pattern']) 
    x.describe(include= 'all') 

ich 18 Klassen mit 12 Klassen, die vollständig Nullen sind. Wie kam es, dass get_dummies Klassen erzeugte, die nicht einmal in der Eingabe vorkamen?

+0

Ich habe keine Ahnung, was Ihr Problem ist, da ich Ihre Daten nicht sehen kann. Kannst du etwas dagegen tun? –

+0

Meine Daten sind nur Zahlen in einem Objektformat wie [0, 0, 5, 6, ....]. Es hatte ursprünglich 18 Klassen, aber alle hohen Klassen wurden in Klasse '6' geändert und die Beschreibungsmethode bestätigt dies. Alle hoch generierten Klassen sind alle Nullen. –

+0

Es tut mir leid, ich verstehe immer noch nicht, und Ihre Erklärung hilft nicht viel. Alle Get Dummies konvertieren Ihre Spalte in einen Datenrahmen von Codierungen. Zählen Sie die Anzahl der Spalten - das ist die Anzahl der einzigartigen Funktionen, die Sie haben. Der Aufruf von 'describe' auf dem Ausgang macht wenig Sinn, da es nur 0s und 1s ist. –

Antwort

2

Aus einer Diskussion in den Kommentaren wurde abgeleitet, dass Ihre Spalte eine Mischung aus Strings und Ganzzahlen enthielt.

Zum Beispiel

s = pd.Series(['0', 0, '0', '6', 6, '6', '3', '3']) 
s 

0 0 
1 0 
2 0 
3 6 
4 6 
5 6 
6 3 
7 3 
dtype: object 

Nun pd.get_dummies Aufruf in mehr solchen Spalten des gleichen Merkmals würde.

pd.get_dummies(s) 

    0 6 0 3 6 
0 0 0 1 0 0 
1 1 0 0 0 0 
2 0 0 1 0 0 
3 0 0 0 0 1 
4 0 1 0 0 0 
5 0 0 0 0 1 
6 0 0 0 1 0 
7 0 0 0 1 0 

Die Lösung besteht darin, sicherzustellen, dass alle Elemente vom selben Typ sind. Ich würde empfehlen, in diesem Fall zu str zu konvertieren.

s.astype(str).str.get_dummies() 


    0 3 6 
0 1 0 0 
1 1 0 0 
2 1 0 0 
3 0 0 1 
4 0 0 1 
5 0 0 1 
6 0 1 0 
7 0 1 0 
Verwandte Themen