Skip to content

BUG: DeprecationWarning shown for internal operations on subclassed Series and DataFrame #57032

Closed
@theOehrly

Description

@theOehrly

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 warnings

import pandas as pd

warnings.simplefilter('always', DeprecationWarning)


class MySeries(pd.Series):

    @property
    def _constructor(self):
        return MySeries


series = MySeries({'A': 1, 'B': 2, 'C': 3})

series.loc[['A', 'B']]

Issue Description

The above code will print

DeprecationWarning: Passing a SingleBlockManager to MySeries is deprecated and will raise in a future version. Use public APIs instead.

because Series._constructor_from_mgr calls self._constructor(mgr) if self._constructor is not a Series without catching that warning.

def _constructor_from_mgr(self, mgr, axes):
if self._constructor is Series:
# we are pandas.Series (or a subclass that doesn't override _constructor)
ser = Series._from_mgr(mgr, axes=axes)
ser._name = None # caller is responsible for setting real name
return ser
else:
assert axes is mgr.axes
return self._constructor(mgr)

The warning is not very helpful in this case, because it recommends to use public APIs, but only public APIs are used. There's also no way to fix it except for just filtering it out.

Expected Behavior

Pandas should not raise this warning when it is actually caused by an internal operation that cannot be changed by a user.

Installed Versions

INSTALLED VERSIONS

commit : 7281475
python : 3.12.1.final.0
python-bits : 64
OS : Windows
OS-release : 10
Version : 10.0.19044
machine : AMD64
processor : AMD64 Family 23 Model 113 Stepping 0, AuthenticAMD
byteorder : little
LC_ALL : None
LANG : None
LOCALE : English_United Kingdom.1252
pandas : 3.0.0.dev0+163.g7281475054
numpy : 1.26.3
pytz : 2023.3.post1
dateutil : 2.8.2
setuptools : 69.0.3
pip : 23.3.2
Cython : None
pytest : 7.4.4
hypothesis : None
sphinx : 7.2.6
blosc : None
feather : None
xlsxwriter : None
lxml.etree : None
html5lib : None
pymysql : None
psycopg2 : None
jinja2 : 3.1.2
IPython : None
pandas_datareader : None
adbc-driver-postgresql: None
adbc-driver-sqlite : None
bs4 : 4.12.2
bottleneck : None
dataframe-api-compat : None
fastparquet : None
fsspec : None
gcsfs : None
matplotlib : 3.8.2
numba : None
numexpr : None
odfpy : None
openpyxl : None
pandas_gbq : None
pyarrow : None
pyreadstat : None
python-calamine : None
pyxlsb : None
s3fs : None
scipy : 1.12.0
sqlalchemy : None
tables : None
tabulate : None
xarray : None
xlrd : None
zstandard : None
tzdata : 2023.4
qtpy : None
pyqt5 : None

Metadata

Metadata

Assignees

No one assigned

    Labels

    InternalsRelated to non-user accessible pandas implementationSubclassingSubclassing pandas objectsWarningsWarnings that appear or should be added to pandas

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions