【问题标题】:More elegant way to do value comparison while preserving Nan in Pandas and Numpy Python在 Pandas 和 Numpy Python 中保留 Nan 的同时进行值比较的更优雅的方法
【发布时间】:2021-06-15 13:02:41
【问题描述】:

所以基本上我想要 5 > np.nan 返回 np.nan 或 Nan 而不是 FALSE
在 pandas 系列中,代码如下:

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)方法来做到这一点,遵循 zen of python ? (更好的可读性,更直接)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    只有一点改进/(更改)您的解决方案:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 2016-09-05
      • 2016-05-26
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2021-09-19
      • 2014-07-11
      相关资源
      最近更新 更多