REGR: df.apply('any', axis=1) fails with ValueError · Issue #48656 · pandas-dev/pandas (original) (raw)
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 df = pd.DataFrame({'a': [0, 1]}) print(df.apply('any', axis=1))
Issue Description
When running the snippet above, pandas 1.5 produces the following stack trace:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Vass\.conda\envs\pandas\lib\site-packages\pandas\core\frame.py", line 9558, in apply
return op.apply().__finalize__(self, method="apply")
File "C:\Users\Vass\.conda\envs\pandas\lib\site-packages\pandas\core\apply.py", line 720, in apply
return self.apply_str()
File "C:\Users\Vass\.conda\envs\pandas\lib\site-packages\pandas\core\apply.py", line 923, in apply_str
return super().apply_str()
File "C:\Users\Vass\.conda\envs\pandas\lib\site-packages\pandas\core\apply.py", line 556, in apply_str
raise ValueError(f"Operation {f} does not support axis=1")
ValueError: Operation any does not support axis=1
I believe the root cause is this chunk of code:
func = getattr(obj, f, None) |
---|
if callable(func): |
sig = inspect.getfullargspec(func) |
if self.axis != 0 and ( |
"axis" not in sig.args or f in ("corrwith", "mad", "skew") |
): |
raise ValueError(f"Operation {f} does not support axis=1") |
which should get the signature of pandas.DataFrame.any
but, as .any()
is decorated:
@deprecate_nonkeyword_arguments( |
---|
version=None, |
allowed_args=["self"], |
name="DataFrame.any and Series.any", |
) |
@doc( |
_bool_doc, |
desc=_any_desc, |
name1=name1, |
name2=name2, |
axis_descr=axis_descr, |
see_also=_any_see_also, |
examples=_any_examples, |
empty_value=False, |
) |
def any( |
self, axis=0, bool_only=None, skipna: bool_t = True, level=None, **kwargs |
): |
return NDFrame.any(self, axis, bool_only, skipna, level, **kwargs) |
it gets the signature of the decorator function instead.
Expected Behavior
The snippet above is printing the following when run on pandas 1.4.4:
0 False
1 True
dtype: bool
I believe it should print the same on 1.5.x, too.
Installed Versions
pd.show_versions()
INSTALLED VERSIONS
------------------
commit : 87cfe4e38bafe7300a6003a1d18bd80f3f77c763
python : 3.8.13.final.0
python-bits : 64
OS : Windows
OS-release : 10
Version : 10.0.22000
machine : AMD64
processor : AMD64 Family 25 Model 80 Stepping 0, AuthenticAMD
byteorder : little
LC_ALL : None
LANG : None
LOCALE : Russian_Russia.1251
pandas : 1.5.0
numpy : 1.23.3
pytz : 2022.2.1
dateutil : 2.8.2
setuptools : 65.3.0
pip : 22.2.2
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 : None
brotli : None
fastparquet : None
fsspec : None
gcsfs : None
matplotlib : None
numba : None
numexpr : None
odfpy : None
openpyxl : None
pandas_gbq : None
pyarrow : None
pyreadstat : None
pyxlsb : None
s3fs : None
scipy : None
snappy : None
sqlalchemy : None
tables : None
tabulate : None
xarray : None
xlrd : None
xlwt : None
zstandard : None
tzdata : None