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
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