python - Python Pandas - 使用 dict 替换 NaN 值
问题描述
使用以下 DF:
A B
0 a 1
1 b 2
2 NaN 1
3 NaN 2
我想A
根据 的数字表示替换 NaN 值B
,以获得:
A B
0 a 1
1 b 2
2 a 1
3 b 2
我已经建立了 B/A 值的字典:{1 : 'a', 2: 'b'}
如何将更改应用于 NaN 值?
解决方案
Series.fillna
与 一起使用Series.map
:
d = {1 : 'a', 2: 'b'}
df.A = df.A.fillna(df.B.map(d))
print (df)
A B
0 a 1
1 b 2
2 a 1
3 b 2
我建议使用map
因为replace
速度较慢,并且如果没有匹配项map
返回缺失值(如原始值)而不是值B
:
df["A"] = df["A"].fillna(df["B"].replace({1 : 'a', 2: 'b'}))
print (df)
A B
0 a 1
1 b 2
2 a 1
3 3 3 <- changed last value to 3
d = {1 : 'a', 2: 'b'}
df.A = df.A.fillna(df.B.map(d))
print (df)
A B
0 a 1
1 b 2
2 a 1
3 NaN 3
推荐阅读
- java - How to use java 8 streams to make a new list by using another's list objects values with filter?
- java - 静态嵌套类的“静态”行为是否有所不同?
- node.js - 部署 node.js / express 服务器时,ApplicationStart 上的 AWS Codedeploy 超时
- json - 'NoneType' object has no attribute 'read' when reading from JSON file
- pandas - 将按计算字段分组为熊猫中的新列时出错
- reporting-services - 运行值 CountDistinct 和逻辑表达式?
- java - 按下按钮后未显示Android通知
- sql - 在 Sqlite 中加入 3 个表并且没有收到预期的输出
- string - PowerShell 中的 .split 对我不起作用有什么原因吗?
- python - 了解 x.name 在 pandas DataFrame 中的使用 apply