Pandas,将简单函数应用于 NaN returns 值而不是 NaN?

Pandas, apply simple function to NaN returns value instead of NaN?

import pandas as pd
import numpy as np

pd.DataFrame(
  {'a':[0,1,2,3],
   'b':[np.nan, np.nan, np.nan,3]}
).apply(lambda x: x> 1)

returns 我 False 列 b,而我想得到 NaN?

    a       b
0   False   False
1   False   False
2   True    False
3   True    True

预计

    a       b
0   False   NaN
1   False   NaN
2   True    NaN
3   True    True

我非常希望我的算术能够跟踪我在哪里有数据,哪里没有数据,我该如何实现?

使用DataFrame.mask or DataFrame.where with DataFrame.isna or DataFrame.notna:

df = df.apply(lambda x: x> 1).mask(df.isna())
#df = df.apply(lambda x: x> 1).where(df.notna())

为了更好的性能避免apply:

df = (df > 1).mask(df.isna())
#df = (df > 1).where(df.notna())

print (df)
       a    b
0  False  NaN
1  False  NaN
2   True  NaN
3   True  1.0

上次使用 nullable boolean:

df = df.astype('boolean')
print (df)
       a     b
0  False  <NA>
1  False  <NA>
2   True  <NA>
3   True  True