Python 在布尔比较中保留NaN值
我在一个数据框中有两个布尔列A和B,每个列都缺少数据(由NaN表示)。我想要的是对这两列执行AND操作,但是如果原始列中的任何一列是NaN,我希望得到的布尔列是NaN。我有下表:Python 在布尔比较中保留NaN值,python,pandas,boolean,missing-data,Python,Pandas,Boolean,Missing Data,我在一个数据框中有两个布尔列A和B,每个列都缺少数据(由NaN表示)。我想要的是对这两列执行AND操作,但是如果原始列中的任何一列是NaN,我希望得到的布尔列是NaN。我有下表: A B 0 True True 1 True False 2 False True 3 True NaN 4 NaN NaN 5 NaN False 现在,当我执行df.A和df.B时,我想要: 0 True 1
A B
0 True True
1 True False
2 False True
3 True NaN
4 NaN NaN
5 NaN False
现在,当我执行df.A和df.B
时,我想要:
0 True
1 False
2 False
3 NaN
4 NaN
5 False
dtype: bool
但我得到的却是:
0 True
1 False
2 False
3 True
4 True
5 False
dtype: bool
这种行为与np.bool(np.nan)&np.bool(False)
及其排列是一致的,但我真正想要的是一个列,它告诉我每一行对这两个都是真的,或者肯定不能对这两个都是真的。如果我知道两个都是真的,那么结果应该是真的,如果我知道至少一个是假的,那么它应该是假的,否则我需要NaN来证明数据丢失
有没有办法做到这一点?让我们使用:
输出:
0 True
1 False
2 False
3 NaN
4 NaN
5 False
Name: A, dtype: object
熊猫>=1.0
如果您使用的是新的(不要与传统的numpybool
类型混淆),pandas将直接支持此操作
#将数据类型转换为“boolean”的小快捷方式`
df2=df.convert\u dtypes()
df2.d类型
布尔值
布尔型
数据类型:对象
df2['A']和df2['B']
0对
1错误
2错误
3.
4.
5错误
数据类型:布尔型
最后,请考虑升级到熊猫1:-(<)/P>期望输出中的最后一个值不是<代码>楠< /C> >使用<代码> NoPy.Logic和。不,只要我知道至少有一个条目是假的,我知道它们不是都是真的。你能扩展你的EQ答案吗?code>df.x=df.x.where(pd.isna,df.x=='1')@EvanBenn在我看来,你正在尝试做一个
填充df.x.fillna(1)
如果df.x是NaN,那么我正在尝试df.x=NaN,否则df.x==1试试这个:df.x.mask(df.x.notnull(),1)
0 True
1 False
2 False
3 NaN
4 NaN
5 False
Name: A, dtype: object
# Setup
df = pd.DataFrame({'A':[True, True, False, True, np.nan, np.nan],
'B':[True, False, True, np.nan, np.nan, False]})
df.dtypes
A object
B object
dtype: object
# A little shortcut to convert the data type to `boolean`
df2 = df.convert_dtypes()
df2.dtypes
A boolean
B boolean
dtype: object
df2['A'] & df2['B']
0 True
1 False
2 False
3 <NA>
4 <NA>
5 False
dtype: boolean