En este artículo discutiremos TypeError: no se puede realizar reduce con tipo flexible y cómo podemos solucionarlo. Este error puede ocurrir cuando encontramos la media de una array NumPy bidimensional que consta de datos de varios tipos.
Conjunto de datos en uso:
Identificación del Estudiante |
Nombre del estudiante |
Rama |
Marcas |
---|---|---|---|
101 |
Harry |
CSE |
87 |
102 |
Ron |
CEPE |
88 |
103 |
Alexa |
CSE |
72 |
Cuando creamos esta tabla usando NumPy, esta array 2D consta de datos con múltiples tipos. En esto, teníamos tipos de datos String y Integer. Para encontrar el valor medio para cualquiera de las columnas numéricas como Marks, arroja TypeError, porque no saber cómo calcular la media cuando no todos los valores son números (es decir, el nombre del estudiante, la sucursal consta de datos de tipo string).
Ejemplo: Error al producir código
Python3
# import necessary packages import numpy as np # create a 2D Array students = np.array([['Student ID', 'Student Name', 'Branch', 'Marks'], [101, 'Hary', 'CSE', 87], [102, 'Ron', 'ECE', 88], [103, 'Alexa', 'CSE', 72]]) # mean of marks(3rd column) print(students[:, 3].mean())
Producción:
Para superar este problema, cree una array 2D utilizando Pandas DataFrame en lugar de NumPy. Dado que DataFrame tiene un valor de índice para cada fila y un nombre para cada columna, ayuda al intérprete a distinguir entre columnas de diferentes tipos.
Esta única alternativa soluciona el problema de manera eficiente.
Ejemplo: código fijo
Python3
# import necessary packages import pandas as pd # create dataframe students = pd.DataFrame({'student_ID': [101, 102, 103], 'student_Name': ['Hary', 'Ron', 'Alexa'], 'Branch': ['CSE', 'ECE', 'CSE'], 'Marks': [87, 88, 72]}) # Table print(students) # mean values for all numeric columns print(students.mean())
Producción:
En el ejemplo anterior, el valor medio del marco de datos se genera para todas las columnas con tipo numérico si no se especifica el nombre de la columna: las columnas ID_estudiante y Marcas son de tipo flotante. Entonces calcula la media para esas 2 columnas y el resto de las columnas son de tipo string. Por lo tanto, no calculará el valor medio.
Publicación traducida automáticamente
Artículo escrito por akhilvasabhaktula03 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA