如何通过 Pandas 中的比较来传播 numpy.nan

问题描述 投票:0回答:1

我们来说吧

df = pd.DataFrame({'A': [1, 3, np.nan]})
df['B'] = df['A'] > 2

我想要这个

     A      B
0  1.0  False
1  3.0   True
2  NaN    NaN

但它给了

     A      B
0  1.0  False
1  3.0   True
2  NaN  False

如何获得我想要的结果,即使用布尔条件时 NaN 的传播?我的代码中有很多这样的条件表达式,如果可能的话,希望避免将它们全部替换为

lambda
函数或
.map
.apply
np.where
语句。

我尝试将所有

NaN
切换为
pd.NA
,这给出了所需的结果,但似乎必须将
dtype
更改为
'Int64'
'Float64'
以适应
pd.NA
,然后不兼容与我正在使用的其他软件包(特别是
statsmodels
引发
TypeError
;似乎是一个已知的兼容性问题)。如果有人知道如何使
pd.NA
float
int
等标准数据类型兼容,那么我很乐意使用它。

pandas numpy nan dtype
1个回答
0
投票

不幸的是(对你来说)比较是有效的,你必须

mask
比较后的值:

df['B'] = df['A'].gt(2).mask(df['A'].isna())

输出:

     A      B
0  1.0  False
1  3.0   True
2  NaN    NaN
© www.soinside.com 2019 - 2024. All rights reserved.