【问题标题】:Fillna Pandas NaN with mean and medianFillna Pandas NaN 的平均值和中位数
【发布时间】:2019-12-04 22:33:49
【问题描述】:

我从 python 和数据科学开始,我有一个超过 5000 行的 .csv 文件。 我想用数据科学家的平均值和数据工程师的中位数替换 Exerience NaN 值。我该如何分组并使用fillna。

每次我尝试将 fillna 与 mean() 一起使用时,都会出现此错误:

TypeError: 只能将 str(不是“int”)连接到 str NaN

【问题讨论】:

  • 能否请您发布一个示例数据集?帮助我们对您很有帮助
  • 试试 df.dtypes 看起来 1,5 是 1 逗号 5,应该是 1.5 吗?如果是这样,您可能需要替换字符串字符 df['Experience'].str.replace(',','.') 然后调用 pd.to_numeric(df['Experience'])
  • 您可能希望使用选项decimal=',' 读取csv。

标签: python pandas


【解决方案1】:

假设您已将此表加载到 Pandas 中名为 df 的变量中。
还假设当您说meanmedian 时,您的意思是Experience 列。

df.loc[
    (df["Metier"] == "Data scientist") & (df["Experience"].isnull()), "Experience"
] = df["Experience"].mean()

df.loc[
    (df["Metier"] == "Data engineer") & (df["Experience"].isnull()), "Experience"
] = df["Experience"].median()

【讨论】:

  • 我得到这个错误:TypeError: can only concatenate str (not "int") to str
  • 查看@Quang Hoang 的评论来解决这个问题。 Experience 中的值应该是浮点数时是字符串。
  • 如果您只想要 Metier 是数据科学家的条目的中位数/平均值,那么您需要修改如下:df.loc[ (df["Metier"] == "Data scientist") & (df["Experience"].isnull()), "Experience"] = df.loc[df["Metier"] == "Data scientist"]["Experience"].mean()
猜你喜欢
  • 2021-01-10
  • 2016-04-09
  • 2013-09-12
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
相关资源
最近更新 更多