Skip to content

BUG/API: behaviour of floordiv with bool operands is very inconsistent #49699

@wence-

Description

@wence-

Pandas version checks

  • I have checked that this issue has not already been reported.

  • I have confirmed this bug exists on the latest version of pandas.

  • I have confirmed this bug exists on the main branch of pandas.

Reproducible Example

import pandas as pd
import numpy as np

# On trunk
pd.Series([1], dtype="bool") // np.bool_(0) # => NotImplementedError
pd.Series([1], dtype="bool") // pd.Series([0], dtype="bool") # => NotImplementedError
pd.Series([1, 0], dtype="bool") // pd.Series([0], dtype="bool") # => ZeroDivisionError
pd.Series([1, 0], dtype="bool") // pd.Series([1], dtype="bool") # => pd.Series([1, np.nan], dtype="object")
pd.Series([1, 0], dtype="bool") // pd.Series([0, 0], dtype="bool") # => NotImplementedError
pd.Series([1, 0], dtype="bool") // pd.Series([1, 1], dtype="bool") # => NotImplementedError

Issue Description

If only one operand is a Series, we consistently get a NotImplementedError for pow, truediv, and floordiv if both operands have boolean dtypes.

If both operands are series (with bool dtype) the behaviour is dependent on whether or not the series have matching lengths. When the lengths mismatch, for some reason the NotImplementedError check is bypassed and we just evaluate as normal.

Expected Behavior

If one is going to not allow division or exponentiation of boolean dtypes, it should happen consistently.

Aside: FWIW, I don't really like this choice, why are booleans special in this way? (I see some discussion in #41165 but with no conclusion).

Installed Versions

INSTALLED VERSIONS

commit : e41b6d7
python : 3.10.6.final.0
python-bits : 64
OS : Darwin
OS-release : 21.6.0
Version : Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000
machine : arm64
processor : arm
byteorder : little
LC_ALL : None
LANG : en_GB.UTF-8
LOCALE : en_GB.UTF-8

pandas : 2.0.0.dev0+643.ge41b6d7827.dirty
numpy : 1.23.4
pytz : 2022.6
dateutil : 2.8.2
setuptools : 65.5.1
pip : 22.3.1
Cython : 0.29.32
pytest : 7.2.0
hypothesis : 6.56.4
sphinx : 4.5.0
blosc : None
feather : None
xlsxwriter : 3.0.3
lxml.etree : 4.9.1
html5lib : 1.1
pymysql : 1.0.2
psycopg2 : 2.9.3
jinja2 : 3.0.3
IPython : 8.6.0
pandas_datareader: 0.10.0
bs4 : 4.11.1
bottleneck : 1.3.5
brotli :
fastparquet : 0.8.3
fsspec : 2021.11.0
gcsfs : 2021.11.0
matplotlib : 3.6.2
numba : 0.56.3
numexpr : 2.8.3
odfpy : None
openpyxl : 3.0.10
pandas_gbq : 0.17.9
pyarrow : 9.0.0
pyreadstat : 1.2.0
pyxlsb : 1.0.10
s3fs : 2021.11.0
scipy : 1.9.3
snappy :
sqlalchemy : 1.4.43
tables : 3.7.0
tabulate : 0.9.0
xarray : 2022.11.0
xlrd : 2.0.1
zstandard : 0.19.0
tzdata : None
qtpy : None
pyqt5 : None

Metadata

Metadata

Assignees

No one assigned

    Labels

    API - ConsistencyInternal Consistency of API/BehaviorBugClosing CandidateMay be closeable, needs more eyeballsNullable by defaultIssues that would be addressed by moving to nullable-by-defaultNumeric OperationsArithmetic, Comparison, and Logical operations

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions