español - scikit learn import python
LabelEncoder: TypeError: ''>'' no se admite entre las instancias de ''float'' y ''str'' (3)
Me enfrento a este error para múltiples variables, incluso tratando valores perdidos. Por ejemplo:
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''
Comprobando la variable que lleva a los resultados de error en:
df[''CRM do Médico''].isnull().sum()
0
Además de los valores de nan, ¿qué podría estar causando este error?
Como los tipos de datos de cadena tienen una longitud variable, se almacenan por defecto como tipo de objeto. Me enfrenté a este problema después de tratar los valores perdidos también. Convertir todas esas columnas para escribir ''categoría'' antes de que la codificación de la etiqueta funcionara en mi caso.
df[cat]=df[cat].astype(''category'')
Y luego verifique df.dtypes y realice la codificación de etiquetas.
Esto se debe a que la serie df[cat]
contiene elementos que tienen diferentes tipos de datos, por ejemplo (cadenas y / o flotadores). Esto podría deberse a la forma en que se leen los datos, es decir, los números se leen como flotante y el texto como cadenas o el tipo de datos fue flotante y se cambió después de la operación fillna
.
En otras palabras
el tipo de datos pandas ''Objeto'' indica tipos mixtos en lugar de tipo str
Así que usando la siguiente línea:
df[cat] = le.fit_transform(df[cat].astype(str))
debería ayudar
O use un molde con división para uniformar el tipo de str
unique, counts = numpy.unique(str(a).split(), return_counts=True)