BUG: 'FloatingArray' object has no attribute 'base' when constructing pd.IntervalIndex with Float64 dtype · Issue #56765 · pandas-dev/pandas (original) (raw)

Pandas version checks

Reproducible Example

import pandas as pd

ser = pd.Series([ 0.2, 0.5, 0.8, ]).astype(pd.Float64Dtype())

bins = { "Low": (0.0, 0.4), "Mid": (0.4, 0.6), "Upper": (0.6, 1.0), }

convert to array of tuples

bins = [(left, right) for left, right in bins.values()]

enforce the Float64 subtype

interval_dtype = pd.IntervalDtype(subtype=ser.dtype, closed="left")

raises error

pd.IntervalIndex.from_tuples(bins, closed="left", dtype=interval_dtype)

Traceback (most recent call last): File "", line 1, in File "C:\Miniconda3-py37_4.10.3\envs\py311pandas\Lib\site-packages\pandas\core\indexes\interval.py", line 343, in from_tuples arr = IntervalArray.from_tuples(data, closed=closed, copy=copy, dtype=dtype) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Miniconda3-py37_4.10.3\envs\py311pandas\Lib\site-packages\pandas\core\arrays\interval.py", line 629, in from_tuples return cls.from_arrays(left, right, closed, copy=False, dtype=dtype) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Miniconda3-py37_4.10.3\envs\py311pandas\Lib\site-packages\pandas\core\arrays\interval.py", line 537, in from_arrays left, right, dtype = cls._ensure_simple_new_inputs( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Miniconda3-py37_4.10.3\envs\py311pandas\Lib\site-packages\pandas\core\arrays\interval.py", line 369, in _ensure_simple_new_inputs lbase = getattr(left, "_ndarray", left).base ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'FloatingArray' object has no attribute 'base'

Issue Description

Hi all,

It seems one is unable to construct a pd.IntervalIndex using the newer extension array dtypes. I see no mention of this limitation in the docs and so assume it is a bug.

Thanks

Expected Behavior

pd.IntervalIndex is constructed as

IntervalIndex([[0.0, 0.4), [0.4, 0.6), [0.6, 1.0)], dtype='interval[Float64, left]')

Installed Versions

C:\Miniconda3-py37_4.10.3\envs\py311pandas\Lib\site-packages_distutils_hack_ init_.py:33: UserWarning: Setuptools is replacing distutils.
warnings.warn("Setuptools is replacing distutils.")

INSTALLED VERSIONS

commit : a671b5a
python : 3.11.7.final.0
python-bits : 64
OS : Windows
OS-release : 10
Version : 10.0.19045
machine : AMD64
processor : Intel64 Family 6 Model 165 Stepping 3, GenuineIntel
byteorder : little
LC_ALL : None
LANG : None
LOCALE : English_United Kingdom.1252

pandas : 2.1.4
numpy : 1.26.3
pytz : 2023.3.post1
dateutil : 2.8.2
setuptools : 68.2.2
pip : 23.3.1
Cython : None
pytest : None
hypothesis : None
sphinx : None
blosc : None
feather : None
xlsxwriter : None
lxml.etree : None
html5lib : None
pymysql : None
psycopg2 : None
jinja2 : None
IPython : None
pandas_datareader : None
bs4 : None
bottleneck : 1.3.5
dataframe-api-compat: None
fastparquet : None
fsspec : None
gcsfs : None
matplotlib : None
numba : None
numexpr : 2.8.7
odfpy : None
openpyxl : None
pandas_gbq : None
pyarrow : None
pyreadstat : None
pyxlsb : None
s3fs : None
scipy : None
sqlalchemy : None
tables : None
tabulate : None
xarray : None
xlrd : None
zstandard : None
tzdata : 2023.3
qtpy : None
pyqt5 : None