Je suis confronté à cette erreur pour plusieurs variables même en traitant des valeurs manquantes ..__ Par exemple:
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'
Vérification de la variable qui a entraîné les résultats d'erreur dans:
df['CRM do Médico'].isnull().sum()
0
Outre les valeurs nan, quelle pourrait être la cause de cette erreur?
Cela est dû à la série df[cat]
contenant des éléments ayant différents types de données (par exemple, des chaînes et/ou des éléments flottants). Cela peut être dû à la façon dont les données sont lues, c'est-à-dire que les nombres sont lus en tant que float et que le texte est en tant que chaînes ou que le type de données était float et modifié après l'opération fillna
.
En d'autres termes
le type de données pandas 'Object' indique des types mixtes plutôt que des types str
donc en utilisant la ligne suivante:
df[cat] = le.fit_transform(df[cat].astype(str))
devrait aider
Comme les types de données de chaîne ont une longueur variable, il est stocké par défaut en tant que type d'objet. J'ai fait face à ce problème après avoir traité les valeurs manquantes aussi. La conversion de toutes ces colonnes en type 'catégorie' avant le codage d'étiquette a fonctionné dans mon cas.
df[cat]=df[cat].astype('category')
Et puis vérifiez df.dtypes et effectuez le codage d'étiquette.
Ou utilisez un modèle avec un type de corde uniforme
unique, counts = numpy.unique(str(a).split(), return_counts=True)