python - 在 Pandas 和 Numpy Python 中保留 Nan 的同时进行值比较的更优雅的方法
问题描述
所以基本上我想要5 > np.nan
returnnp.nan
或 Nan 而不是FALSE
在熊猫系列中,这是代码:
import pandas as pd
import numpy as np
a = pd.DataFrame({"x":[1,2,3,4],"y":[1,np.nan,5,1]})
a["x"]>a["y"]
将返回 :
0 False
1 False
2 False
3 True
dtype: bool
我目前保存 Nan 信息的方法是:
value_comparison = a["x"]>a["y"]
nan_comparison = a["x"].isna() | a["y"].isna()
value_comparison.where(~nan_comparison,np.nan)
它返回的地方
0 0.0
1 NaN
2 0.0
3 1.0
dtype: float64
我也采用了类似的方法进行 numpy 比较
即使结果是正确的,我相信我的解决方案并不优雅,有没有更好的(pandas 和 numpy)方法来做到这一点,它遵循python 的禅宗?(更好的可读性,更直接)
解决方案
只有一点改进/(更改)您的解决方案:
value_comparison = (a["x"]>a["y"])
nan_comparison = a[["x", "y"]].notna().all(axis=1)
#alternative
#nan_comparison = a["x"].notna() & a["y"].notna()
m = value_comparison.where(nan_comparison)
print (m)
0 0.0
1 NaN
2 0.0
3 1.0
dtype: float64
最后可以转换为nullable boolean
:
m = value_comparison.where(nan_comparison).astype('boolean')
print (m)
0 False
1 <NA>
2 False
3 True
dtype: boolean
推荐阅读
- escaping - 如何使用 MessageFormat.js 为“SelectFormat”转义“/”
- matlab - 相同的 C 代码不同的结果 TIv5.2.5 和 gcc 5.4.1 c99 编译器
- reactjs - 如何在 React Native 中为推送通知添加点击操作
- elasticsearch - Elasticsearch 在机器(节点)故障的情况下恢复数据
- ios - UIGestureRecognizer 识别订单问题
- node.js - 一旦将音频文件添加到nodejs中的文件中,如何从音频文件中读取数据作为缓冲区?
- c# - 如何更新/合并两个巨大的列表
在 C# 中具有数百个属性,以最有效的方式基于通用匹配键 - javascript - 如何刷新select2下拉列表?
- android - 从数据库中删除数据 - 如何?
- powershell - 我如何制作修改文件 MIK_Neva.xml 中值百分比的程序