【问题标题】:How can .mean() exclude NaN values inside aggregate function?.mean() 如何在聚合函数中排除 NaN 值?
【发布时间】:2017-12-21 09:50:27
【问题描述】:

我的数据集有很多列。这里有两个:

Index  Graduated  Age
0      College    24
1      HighSch    18
2      College    26
3      College    Nan
4      HighSch    20

Age 的平均值很简单:

df.Age.mean()

但是,我还有很多其他列,因此我使用的是 agg():

df.groupby('Graduated').agg({'Age':'mean'})

我得到的错误:

没有要聚合的数字类型 如果我插入一个数字而不是 NaN,它可以工作!

如果列具有 NaN 值,agg() 函数是否不允许我们运行平均值?有没有办法解决这个问题?

【问题讨论】:

  • 从外观上看,它不是“数字”nan,而是一个字符串"Nan"。将其从 numpy 更改为 np.nan,它应该可以工作。
  • 请参阅stackoverflow.com/questions/25039328/… 以获取您的特定问题的答案,不包括@ayhan 提到的"Nan" 问题

标签: python pandas dataframe


【解决方案1】:

正如@ayhan 所说,Nan 值看起来像字符串。一种可能的解决方案是,您可以使用这两行中的任何一行将您拥有的 Nan 字符串替换为实际的 NaN 值:

df['Age'] = df['Age'].replace(r'Nan', np.nan, regex=True)

@ayhan 的建议是使用to_numeric 方法。

df['Age'] = pd.to_numeric(df['Age'], errors='coerce')

然后执行您在问题中提到的聚合。我会为所有列做同样的事情,以避免混淆,并从一开始就直截了当,以便将来进行分析。

【讨论】:

  • 如果 dtype 是对象,您可能仍需要 df["age"] = pd.to_numeric(df["age"], errors="coerce")
  • 我试过了,给了我,ValueError: Unable to parse string "Nan" at position 3
  • 这有效,您希望我将其添加到答案中吗?
  • 那太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2014-11-30
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多