python - Pandas 数据框列减法,处理 NaN
问题描述
例如,我有一个数据框
df = pd.DataFrame([(np.nan, .32), (.01, np.nan), (np.nan, np.nan), (.21, .18)],
columns=['A', 'B'])
A B
0 NaN 0.32
1 0.01 NaN
2 NaN NaN
3 0.21 0.18
我想从中减去B
列A
df['diff'] = df['A'] - df['B']
A B diff
0 NaN 0.32 NaN
1 0.01 NaN NaN
2 NaN NaN NaN
3 0.21 0.18 0.03
如果其中一列是 ,则差异返回 NaN NaN
。为了克服这个我使用fillna
df['diff'] = df['A'].fillna(0) - df['B'].fillna(0)
A B diff
0 NaN 0.32 -0.32
1 0.01 NaN 0.01
2 NaN NaN 0.00
3 0.21 0.18 0.03
这解决NaN
了 diff 列的问题,但是对于索引 2,结果是0
,而我想要差异,NaN
因为列 A 和 B 是NaN
。
NaN
如果两列都是 NaN ,有没有办法明确告诉熊猫输出?
解决方案
Series.sub
与fill_value=0
参数一起使用:
df['diff'] = df['A'].sub(df['B'], fill_value=0)
print (df)
A B diff
0 NaN 0.32 -0.32
1 0.01 NaN 0.01
2 NaN NaN NaN
3 0.21 0.18 0.03
如果需要替换 NaN 以0
添加Series.fillna
:
df['diff'] = df['A'].sub(df['B'], fill_value=0).fillna(0)
print (df)
A B diff
0 NaN 0.32 -0.32
1 0.01 NaN 0.01
2 NaN NaN 0.00
3 0.21 0.18 0.03
推荐阅读
- batch-file - GDAL 脚本的批处理命令
- qt - Size constraints for Qt layouts
- node.js - 运行 Npm install 时出现 NPM ENOENT 错误
- python - 如何使用 Openpyxl 的表模块创建表?
- python - 为什么 Flask Migrations 没有检测到字段的长度变化?
- sql-server - 使用 AAD 凭据将 Power BI 与 Azure SQL 数据库服务器连接
- python - 如何从单独的模块附加记录器?
- node.js - 将 Web 数据写入 TXT 文件
- javascript - 当特定的 div/元素滚动到视图中时,是否可以更改元素的样式?
- java - 在 Log4j 中的类之间传递类记录器的缺点是什么