【问题标题】:Is there a way to replace specific values in a Dataframe respectively with others?有没有办法分别用其他值替换 Dataframe 中的特定值?
【发布时间】:2020-10-15 01:14:43
【问题描述】:

我目前正在从事一个机器学习项目,我必须将 -99 值 (nan) 替换为每列的平均值。但是,我无法替换正确的值,只能替换所有列的第一个值。所以,我需要的是每列的平均值而不是该列的 -99。

我首先为每一列生成均值:

mean_miss = []

for i in df_train[vars_ind_numeric]:
    mean_miss = df_train[vars_ind_numeric].mean()

然后通过:

for var in df_train[vars_ind_numeric]:
        df_train[vars_ind_numeric]=df_train[vars_ind_numeric]\
        .replace(nan, mean_miss[var])

关于如何解决这个问题的任何想法?提前致谢

【问题讨论】:

标签: python pandas dataframe machine-learning nan


【解决方案1】:

如果您正在寻找的是用列均值填充每列中的 NA 值,这里有一个解决方案(用于虚拟数据):

df = pd.DataFrame({"a": range(10), "b": range(10, 20)})
df.loc[5, "a"] = np.NaN
df.loc[9, "a"] = np.NaN
df.loc[7, "b"] = np.NaN

得到的数据是:

     a     b
0  0.0  10.0
1  1.0  11.0
2  2.0  12.0
3  3.0  13.0
4  4.0  14.0
5  NaN  15.0
6  6.0  16.0
7  7.0   NaN
8  8.0  18.0
9  NaN  19.0

平均值为:

print(df.mean())
a     3.875000
b    14.222222
dtype: float64

现在,进行实际计算:

df.fillna(df.mean())

       a          b
0  0.000  10.000000
1  1.000  11.000000
2  2.000  12.000000
3  3.000  13.000000
4  4.000  14.000000
5  3.875  15.000000
6  6.000  16.000000
7  7.000  14.222222
8  8.000  18.000000
9  3.875  19.000000

【讨论】:

  • 谢谢,但我的 nan 是数字 -99。因此,当出现在列中时,必须用平均值替换。
  • 我已经设法将所有的 -99 和无限数转换为 nan,然后用平均值填充它们。再次感谢
  • 如果这回答了您的问题,您介意为后代接受它吗? (点击答案旁边的复选标记)
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
相关资源
最近更新 更多