📜  如何修复:TypeError:无法使用灵活类型执行 reduce

📅  最后修改于: 2022-05-13 01:54:45.606000             🧑  作者: Mango

如何修复: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 列的平均值,其余列的类型为字符串。所以它不会计算平均值。