web-dev-qa-db-de.com

LabelEncoder: TypeError: '>' wird nicht zwischen Instanzen von 'float' und 'str' unterstützt

Dieser Fehler tritt für mehrere Variablen auf, auch wenn fehlende Werte behandelt werden. __ Beispiel:

le = preprocessing.LabelEncoder()
categorical = list(df.select_dtypes(include=['object']).columns.values)
for cat in categorical:
    print(cat)
    df[cat].fillna('UNK', inplace=True)
    df[cat] = le.fit_transform(df[cat])
#     print(le.classes_)
#     print(le.transform(le.classes_))


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-424a0952f9d0> in <module>()
      4     print(cat)
      5     df[cat].fillna('UNK', inplace=True)
----> 6     df[cat] = le.fit_transform(df[cat].fillna('UNK'))
      7 #     print(le.classes_)
      8 #     print(le.transform(le.classes_))

C:\Users\paula.ceccon.ribeiro\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py in fit_transform(self, y)
    129         y = column_or_1d(y, warn=True)
    130         _check_numpy_unicode_bug(y)
--> 131         self.classes_, y = np.unique(y, return_inverse=True)
    132         return y
    133 

C:\Users\paula.ceccon.ribeiro\AppData\Local\Continuum\Anaconda3\lib\site-packages\numpy\lib\arraysetops.py in unique(ar, return_index, return_inverse, return_counts)
    209 
    210     if optional_indices:
--> 211         perm = ar.argsort(kind='mergesort' if return_index else 'quicksort')
    212         aux = ar[perm]
    213     else:

TypeError: '>' not supported between instances of 'float' and 'str'

Überprüfen der Variablen, die zu den Fehlerergebnissen führen, in:

df['CRM do Médico'].isnull().sum()
0

Was könnte diesen Fehler neben nan-Werten verursachen?

29
pceccon

Dies ist darauf zurückzuführen, dass die Reihe df[cat] Elemente enthält, die unterschiedliche Datentypen aufweisen (z. B. Strings und/oder Floats). Dies könnte darauf zurückzuführen sein, wie die Daten gelesen werden, d. H. Zahlen werden als Float und Text als Zeichenfolgen gelesen oder der Datentyp wurde Float und nach der fillna-Operation geändert.

Mit anderen Worten 

pandas-Datentyp 'Object' bezeichnet gemischte Typen anstelle von str-Typ

so mit der folgenden Zeile:

df[cat] = le.fit_transform(df[cat].astype(str))


sollte helfen

70
sgDysregulation

Da String-Datentypen eine variable Länge haben, werden diese standardmäßig als Objekttyp gespeichert. Dieses Problem hatte ich auch, nachdem ich fehlende Werte behandelt hatte. Das Konvertieren all dieser Spalten in den Typ 'category', bevor die Etikettencodierung in meinem Fall funktioniert hat.

df[cat]=df[cat].astype('category')

Überprüfen Sie dann df.dtypes und führen Sie die Label-Codierung durch.

1
Rutuja

Oder verwenden Sie einen Abguss mit geteiltem Typ für str

unique, counts = numpy.unique(str(a).split(), return_counts=True)
0
Max Kleiner