BUG: The DataFrame.apply method does not use the extra argument list when raw=True · Issue #55009 · pandas-dev/pandas (original) (raw)

Pandas version checks

Reproducible Example

import numpy as np from pandas import DataFrame

create a data frame with two columns and ten rows of random numbers

df = DataFrame(np.random.randn(10, 2), columns=list('ab'))

apply a function with additional argument to each row

does not work

print(df.apply( lambda row, arg: row[0] + row[1] + arg, axis=1, raw=True, args=(1000,) ))

works

print(df.apply( lambda row, arg: row['a'] + row['b'] + arg, axis=1, raw=False, args=(1000,) ))

Issue Description

When running the DataFrame.apply method, if raw=True is specified with args, the extra arguments are not passed to the function and it results in this error:

TypeError: <lambda>() missing 1 required positional argument: 'arg'

If raw=False, it works as expected. This seems to occur in version 2.1.0 and up.

I tracked the issue down to this line in pandas. It seems that the extra arguments are not passed to np.apply_along_axis. Changing the line in question to this one:

result = np.apply_along_axis(wrap_function(self.func), self.axis, self.values, *self.args, **self.kwargs)

made the code work as expected, but maybe there is more to it? If not, I can make a PR with these changes.

Expected Behavior

The program should not crash and print the same result in both cases.

Installed Versions

INSTALLED VERSIONS
------------------
commit              : 4b456e23278b2e92b13e5c2bd2a5e621a8057bd1
python              : 3.10.9.final.0
python-bits         : 64
OS                  : Linux
OS-release          : 6.1.44-1-MANJARO
Version             : #1 SMP PREEMPT_DYNAMIC Wed Aug  9 09:02:26 UTC 2023
machine             : x86_64
processor           : 
byteorder           : little
LC_ALL              : None
LANG                : en_US.UTF-8
LOCALE              : en_US.UTF-8

pandas              : 2.2.0dev0+171.g4b456e2327
numpy               : 1.23.5
pytz                : 2022.7.1
dateutil            : 2.8.2
setuptools          : 65.6.3
pip                 : 22.3.1
Cython              : None
pytest              : 7.2.1
hypothesis          : None
sphinx              : 6.1.3
blosc               : None
feather             : None
xlsxwriter          : None
lxml.etree          : None
html5lib            : None
pymysql             : None
psycopg2            : None
jinja2              : 3.1.2
IPython             : 8.10.0
pandas_datareader   : None
bs4                 : 4.12.2
bottleneck          : None
dataframe-api-compat: None
fastparquet         : None
fsspec              : 2023.1.0
gcsfs               : None
matplotlib          : 3.7.0
numba               : None
numexpr             : None
odfpy               : None
openpyxl            : None
pandas_gbq          : None
pyarrow             : None
pyreadstat          : None
pyxlsb              : None
s3fs                : None
scipy               : 1.10.1
sqlalchemy          : 2.0.4
tables              : None
tabulate            : 0.9.0
xarray              : None
xlrd                : None
zstandard           : None
tzdata              : 2023.3
qtpy                : None
pyqt5               : None
None