如何修复:TypeError:无法使用灵活类型执行 reduce
在本文中,我们将讨论 TypeError: cannot perform reduce with flexible type 以及我们如何解决它。当我们找到由多种类型的数据组成的二维 NumPy 数组的均值时,可能会发生此错误。
正在使用的数据集: Student ID Student Name Branch Marks 101 Harry CSE 87 102 Ron ECE 88 103 Alexa CSE 72
什么时候我们 使用 NumPy 创建此表,然后此 2D 数组由多种类型的数据组成。 在此,我们有 String 和 Integer 数据类型。 要找到任何数字列(如 Marks)的平均值,它会抛出 TypeError,因为当并非所有值都是数字时(即 Student Name、Branch 包含字符串类型的数据),它不知道如何取平均值。
示例:生成代码时出错
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())
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())
输出:
为了克服这个问题,使用 Pandas DataFrame 而不是 NumPy 创建一个二维数组。由于 DataFrame 的每一行都有一个索引值,每一列都有一个名称,它有助于解释器区分不同类型的列。
这个单一的替代方案有效地解决了这个问题。
示例:固定代码
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())
输出:
在上面的示例中,如果未指定列名 - student_ID 和 Marks 列的类型为 float,则为所有具有数字类型的列生成数据框平均值。所以它计算这 2 列的平均值,其余列的类型为字符串。所以它不会计算平均值。