LabelEncoder: TypeError: ‘>’ no se admite entre las instancias de ‘float’ y ‘str’

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)  in () 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?

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

usando la siguiente línea:

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

debería ayudar

Como los tipos de datos de cadena tienen una longitud variable, se almacenan de forma predeterminada 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 encoding de la etiqueta funcionara en mi caso.

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

Y luego verifique df.dtypes y realice la encoding de tags.

O use un molde con división para uniformar el tipo de str

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