diff --git a/doc/source/whatsnew/v2.0.0.rst b/doc/source/whatsnew/v2.0.0.rst index 29f360e050548..39c3916a6c63b 100644 --- a/doc/source/whatsnew/v2.0.0.rst +++ b/doc/source/whatsnew/v2.0.0.rst @@ -1304,6 +1304,7 @@ I/O - Bug in :meth:`DataFrame.to_dict` not converting ``NA`` to ``None`` (:issue:`50795`) - Bug in :meth:`DataFrame.to_json` where it would segfault when failing to encode a string (:issue:`50307`) - Bug in :func:`read_xml` where file-like objects failed when iterparse is used (:issue:`50641`) +- Bug in :func:`read_excel` where passing invalid argument name ``headers`` to :meth:`parse` doesn't raise error (:issue:`50953`) Period ^^^^^^ diff --git a/pandas/io/excel/_base.py b/pandas/io/excel/_base.py index 79d174db5c0a7..6e9723a4823dc 100644 --- a/pandas/io/excel/_base.py +++ b/pandas/io/excel/_base.py @@ -21,6 +21,7 @@ cast, overload, ) +import warnings import zipfile from pandas._config import ( @@ -47,6 +48,7 @@ Appender, doc, ) +from pandas.util._exceptions import find_stack_level from pandas.core.dtypes.common import ( is_bool, @@ -1553,11 +1555,49 @@ def parse( Equivalent to read_excel(ExcelFile, ...) See the read_excel docstring for more info on accepted parameters. + .. deprecated:: 2.0.0 + Arguments other than sheet_name by position may not work. + Returns ------- DataFrame or dict of DataFrames DataFrame from the passed in Excel file. """ + arguments = list(kwds.keys()) + allowed_kwargs = [ + "sheet_name", + "header", + "names", + "index_col", + "usecols", + "squeeze", + "dtype", + "engine", + "converters", + "true_values", + "false_values", + "skiprows", + "nrows", + "na_values", + "keep_default_na", + "na_filter", + "verbose", + "parse_dates", + "date_parser", + "thousands", + "decimal", + "comment", + "skipfooter", + "convert_float", + ] + # Check for any invalid kwargs + if [argument for argument in arguments if argument not in allowed_kwargs]: + warnings.warn( + f"{type(self).__name__}.parse is deprecated. " + "Arguments other than sheet_name by position may not work.", + FutureWarning, + stacklevel=find_stack_level(), + ) return self._reader.parse( sheet_name=sheet_name, header=header, diff --git a/pandas/tests/io/excel/test_readers.py b/pandas/tests/io/excel/test_readers.py index 3f2fecbfb48a6..df5d59e0c70f8 100644 --- a/pandas/tests/io/excel/test_readers.py +++ b/pandas/tests/io/excel/test_readers.py @@ -1684,3 +1684,11 @@ def test_corrupt_files_closed(self, engine, read_ext): pd.ExcelFile(file, engine=engine) except errors: pass + + def test_read_excel_parse_warning(self, read_ext): + # GH50953 + msg = "Arguments other than sheet_name by position may not work." + with tm.assert_produces_warning(FutureWarning, match=msg): + with pd.ExcelFile("test1" + read_ext) as excel: + excel.parse("Sheet1", headers=[0, 1, 2]) + # invalid argument 'headers' should give warning for deprecation