为什么在使用 .mean() 时得到 NaN

Why do I get NaN when using .mean()

这是 GIT 公开课程的一部分,我在空闲时间学习 python。本练习仅涉及 numpy。因此,下面是创建文件路径并导入数据。我添加了 skip_header 因为列名是字符串并且我得到了 Nan。因此,数据有 33 列,我只需要 5 列,我使用 usecols 添加了这些列。

import numpy as np
fp = 'C:\Users\matij\Documents\exercise-5-MatijaKordic\6153237444115dat.csv'
data = np.genfromtxt(fp, skip_header =1, usecols=(0, 2, 22, 27, 28), delimiter=',')

接下来,我需要将数据拆分为名为 station、date、temp、temp_max 和 temp_min 的单独变量。它们对应于 usecols=(0, 2, 22, 27, 28)。

station = data[:, 0]
date = data[:, 1]
temp = data[:, 2]
temp_max = data[:, 3]
temp_min = data[:, 4]

在此之后,我需要计算以下内容:

数据中的平均华氏温度是多少? (临时变量)

最高温度的标准差是多少? (temp_max 变量)

数据中存在多少个唯一站点? (车站变量)

所以,我这样做了:

temp_mean = temp.mean()
temp_max_std = temp_max.std()
station_count = np.unique(station)

我得到平均值和最大值的 NaN。对于独特的电台,我得到 [28450. 29980.] 所以我想我需要以某种方式在其中添加计数?

关于均值和最大值: - Max 是 Nan,所以这很好。不知道为什么我在作业中有它,但那是另一回事。 - 然而,意思是这个问题的原因。当我打印 temp 时,我得到了值,那么为什么我得到 temp.mean 的 NaN?

如果有人感兴趣,这里是 link 到 csv 的文件: https://drive.google.com/file/d/1rGneQTfUe2rq1HAPQ06rvLDxzi-ETgKe/view?usp=sharing

你得到 nan 因为 numpy 数组中的一些数据是 nan。试试这个:

temp_mean = temp[~np.isnan(temp)].mean()
print(temp_mean)
temp_max_std = temp_max[~np.isnan(temp_max)].std()
print(temp_max_std)
station_count = np.unique(station)

输出:

41.58918641457781
9.734807757434636
array([28450., 29980.])

我同意 Anubhav 的 post,但我建议改为使用: np.nanmean(temp) 来计算忘记 NaN(不是数字)条目的平均值。您也会得到相同的平均值:41.58918641457781。 与 max 相同:

print(np.nanmean(temp))
print(np.nanmax(temp))

输出:

41.58918641457781
65.0