python - 用每列的特定值替换 NaN 值
问题描述
我有一个包含值以及一些 NaN 的数据框。现在我有了列的平均值,我想将特定列的平均值插入到 NaN 值中。例如:
我有 ColA 和 ColB 的平均值。我想将它们插入到 NaN 位置。我可以使用 replace 方法单独执行此操作。但是对于很多专栏,有没有其他方法可以实现这一点?
解决方案
编辑:
如果已经有 Series with 意味着只使用DataFrame.fillna
:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[4,np.nan,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,np.nan,1,0],
'E':[np.nan,3,6,np.nan,2,4],
'F':list('aaabbb')
})
means = pd.Series([10,20], index=['B','E'])
df= df.fillna(means)
print (df)
A B C D E F
0 a 4.0 7 1.0 20.0 a
1 b 10.0 8 3.0 3.0 a
2 c 4.0 9 5.0 6.0 a
3 d 5.0 4 NaN 20.0 b
4 e 5.0 2 1.0 2.0 b
5 f 4.0 3 0.0 4.0 b
如果需要替换所有使用DataFrame.fillna
的数字列中的缺失值mean
- 它可以工作,因为mean
排除非数字列:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[4,np.nan,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,np.nan,1,0],
'E':[np.nan,3,6,np.nan,2,4],
'F':list('aaabbb')
})
df1 = df.fillna(df.mean())
print (df1)
A B C D E F
0 a 4.0 7 1.0 3.75 a
1 b 4.4 8 3.0 3.00 a
2 c 4.0 9 5.0 6.00 a
3 d 5.0 4 2.0 3.75 b
4 e 5.0 2 1.0 2.00 b
5 f 4.0 3 0.0 4.00 b
如果需要指定列,则仅使用列名列表更改解决方案:
cols = ['D','B']
df[cols] = df[cols].fillna(df[cols].mean())
print (df)
A B C D E F
0 a 4.0 7 1.0 NaN a
1 b 4.4 8 3.0 3.0 a
2 c 4.0 9 5.0 6.0 a
3 d 5.0 4 2.0 NaN b
4 e 5.0 2 1.0 2.0 b
5 f 4.0 3 0.0 4.0 b
推荐阅读
- php - Laravel HasManyThrough 返回属性 [X] 在此集合实例上不存在
- c++ - 是 clang-11 的调用
通过 -fcoroutines 标志标头? - haskell - Haskell,将泛型与 Char 进行比较
- javascript - 如何处理promise.all拒绝三个promise中的一个promise?
- angular - Ionic 在一个信号推送通知上没有警报
- javascript - '@' 登录反应 JS 包导入
- php - 通过 apply_filter 使用传递给另一个函数的对象值
- oracle - Oracle - 根据另一个表中的字段更新表
- c - 如何将矩阵传递给双指针函数?
- python - “with”语句 - 在较低范围内访问“输入”对象(不通过参数显式传递信息)