如何修复:TypeError: cannot perform reduce with flexible type
在这篇文章中,我们将讨论TypeError: cannot perform reduce with flexible type and how can we fix it.当我们为一个由多种类型的数据组成的二维NumPy数组寻找平均值时,可能会发生这个错误。
使用中的数据集:
Student ID | Student Name | Branch | Marks |
---|---|---|---|
101 | Harry | CSE | 87 |
102 | Ron | ECE | 88 |
103 | Alexa | CSE | 72 |
当我们使用NumPy创建这个表时,这个二维数组由多种类型的数据组成。 在这里,我们有字符串和整数数据类型。 要找到任何一个数字列的平均值,如Marks,它会抛出TypeError,因为它不知道当不是所有的值都是数字时如何取平均值(如Student Name, Branch由字符串类型的数据组成)。
例子:产生错误的代码
# 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())
输出:
为了克服这个问题,使用Pandas DataFrame而不是NumPy创建一个2D数组。由于DataFrame的每一行都有一个索引值,每一列都有一个名称,这有助于解释器区分不同类型的列。
这个单一的替代方案有效地解决了这个问题。
例子:解决的代码
# 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())
输出:
学生表和均值结果
在上面的例子中,如果没有指定列名,数据框架的平均值将为所有数字类型的列生成–student_ID和Marks列是浮动类型的。所以它会计算这两列的平均值,其余的列是字符串类型。所以它不会计算出平均值。