Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在布尔比较中保留NaN值_Python_Pandas_Boolean_Missing Data - Fatal编程技术网

Python 在布尔比较中保留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,每个列都缺少数据(由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    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 如果您使用的是新的(不要与传统的numpy
bool
类型混淆),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