我在尝试使用NumPy计算学生的平均分数时遇到了一个问题。我写的代码给了我以下错误:
Traceback(most recent call last):average_scores = np.nanmean(numeric_columns,axis=1)... numpy.core._exceptions._ufuncNoLoopError:ufunc 'add'未包含签名匹配类型的循环
代码
import numpy as np
# Defining anything that could be missing in someone else's data
missing_values = ['N/A', 'NA', 'nan', 'NaN', 'NULL', '', '']
# Defining each of the data types
dtype = [('Student Name', 'U50'), ('Math', 'float'),
('Science', 'float'), ('English', 'float'),
('History', 'float'), ('Art', 'float')]
# Load data into a numpy array
data = np.genfromtxt('grades.csv', delimiter=',',
names=True, dtype=dtype,
encoding=None, missing_values=missing_values,
filling_values=np.nan, ndmin=2)
# Get all the field names (column names) in the structured array
field_names = data.dtype.names
# Extract the numeric columns by checking their data type
numeric_columns = data[[field for field in field_names if data[field].dtype == float]]
# Calculate the average score for each student
average_scores = np.nanmean(numeric_columns, axis=1)
print(average_scores)
字符串
以下是我在“grades.csv”文件中的数据:
Student Name,Math,Science,English,History,Art
Alice,90,88,94,85,78
Bob, 85,92,,88,90
Charlie,78,80,85,85,79
David,94,,90,92,84
Eve,92,88,92,90,88
Frank,,95,94,86,95
型
我尝试了什么我尝试了加载数据,过滤数字列,并使用np.nanmean()计算平均分数。我还确保适当地处理缺失值。
期望我期望代码计算并打印每个学生的平均分数,没有错误。
请求帮助如果您能帮助我了解错误的原因以及如何解决它,我将不胜感激。
2条答案
按热度按时间wz1wpwve1#
函数
np.nanmean()
正确,因为它是ignores the NaN values, read documentation.对于您的示例,您的数值列是一个异构(多类型)数组。您可以通过使用
array.astype()
函数将其转换为同构(单类型)数组来解决此问题。试试这个:
的数据
xurqigkl2#
使用您的示例txt:
字符串
你的vw处理
genfromtxt
以及任何人,我见过的SO:型
data
是一个结构化数组;ipython's
显示的是repr
,所以它显示的是dtype:型
这是一个(6,1)形状,有5个字段。尺寸1的维度在那里是因为你指定了
ndmin=2
。如果没有,它将是(6,)。nanmean
不能处理这种复合dtype。有几种方法可以转换为简单的浮点数组。astype/view
可以,也可以:型
另一个转换器:
型