From 098cb6b40431b8934ad69fd2d42224e7e4b1e7e5 Mon Sep 17 00:00:00 2001 From: Pacific <12509045+pacificdragon@users.noreply.github.com> Date: Sun, 12 Feb 2023 01:14:26 +0530 Subject: [PATCH 1/2] Add Deprecation FutureWarning for parse function call --- doc/source/whatsnew/v2.0.0.rst | 1 + pandas/io/excel/_base.py | 12 +++++++++++- pandas/tests/io/excel/test_readers.py | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v2.0.0.rst b/doc/source/whatsnew/v2.0.0.rst index 410690de1a1ec..9542d82c75e8a 100644 --- a/doc/source/whatsnew/v2.0.0.rst +++ b/doc/source/whatsnew/v2.0.0.rst @@ -1303,6 +1303,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..7439642b31bfd 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, @@ -1552,12 +1554,20 @@ 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. """ + if kwds: + 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 From e5b60930414cdeb8995207bdbaba6c25b37fa5ad Mon Sep 17 00:00:00 2001 From: Pacific <12509045+pacificdragon@users.noreply.github.com> Date: Sun, 12 Feb 2023 18:05:26 +0530 Subject: [PATCH 2/2] Adding list of allowed args and correcting doc indentation --- pandas/io/excel/_base.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/pandas/io/excel/_base.py b/pandas/io/excel/_base.py index 7439642b31bfd..6e9723a4823dc 100644 --- a/pandas/io/excel/_base.py +++ b/pandas/io/excel/_base.py @@ -1554,14 +1554,44 @@ 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. + Arguments other than sheet_name by position may not work. + Returns ------- DataFrame or dict of DataFrames DataFrame from the passed in Excel file. """ - if kwds: + 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.",