Ik heb te maken met deze fout voor meerdere variabelen, zelfs als ik ontbrekende waarden behandel.
Bijvoorbeeld:
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'
Het controleren van de variabele die tot de fout leidde, resulteert in:
df['CRM do Médico'].isnull().sum()
0
Naast nan-waarden, wat zou deze fout kunnen veroorzaken?
Antwoord 1, autoriteit 100%
Dit komt door de reeks df[cat]
die elementen bevat die verschillende datatypes hebben, bijvoorbeeld (strings en/of floats). Dit kan te wijten zijn aan de manier waarop de gegevens worden gelezen, d.w.z. getallen worden gelezen als zwevend en tekst als tekenreeksen of het gegevenstype is zwevend en gewijzigd na de bewerking fillna
.
Met andere woorden
panda’s-gegevenstype ‘Object’ geeft gemengde typen aan in plaats van str-type
dus gebruik de volgende regel:
df[cat] = le.fit_transform(df[cat].astype(str))
zou moeten helpen
Antwoord 2, autoriteit 6%
Omdat stringgegevenstypen een variabele lengte hebben, wordt deze standaard opgeslagen als objecttype. Ik kreeg met dit probleem te maken nadat ik ook ontbrekende waarden had behandeld. Het converteren van al die kolommen naar het type ‘categorie’ voordat labelcodering werkte in mijn geval.
df[cat]=df[cat].astype('category')
En controleer dan df.dtypes en voer labelcodering uit.
Antwoord 3
Of gebruik een cast met split tot uniform type str
unique, counts = numpy.unique(str(a).split(), return_counts=True)