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)