Skip to content

API: Series/DataFrame logical op NaN propagation #13896

Closed
@sinhrks

Description

@sinhrks

The same as #13806, but for discuss differences with DataFrame.

pd.Series([True, False, np.nan]) | pd.Series([True, False, True])
#0     True
#1    False
#2    False
# dtype: bool

pd.Series([True, False, True]) | pd.Series([True, False, np.nan])
#0     True
#1    False
#2     True
# dtype: bool

pd.DataFrame([True, False, np.nan]) | pd.DataFrame([True, False, True])
#        0
#0   True
#1  False
#2    NaN

pd.DataFrame([True, False, True]) | pd.DataFrame([True, False, np.nan])
#        0
#0   True
#1  False
#2    NaN

There looks to be 2 points:

1. NaN comparison result

As @TomAugspurger described in #13806, the basic rule is below. Based on this, DataFrame result is incorrect.

In [40]: float('nan') or 1
Out[40]: nan

In [41]: 1 or float('nan')
Out[41]: 1

2. filling NaN result

Series fills NaN included in the result with False. DataFrame should also?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions