Skip to content

Commit 11bed21

Browse files
committed
BUG: Handle sheetname deprecation directly
Since sheetname=None has a special meaning, we can't use the deprecate_kwargs decorator. We instead handle it in read_excel.
1 parent f6cbf8f commit 11bed21

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

pandas/io/excel.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import os
1010
import abc
11+
import warnings
1112
import numpy as np
1213

1314
from pandas.core.dtypes.common import (
@@ -30,7 +31,7 @@
3031
import pandas.compat.openpyxl_compat as openpyxl_compat
3132
from warnings import warn
3233
from distutils.version import LooseVersion
33-
from pandas.util._decorators import Appender, deprecate_kwarg
34+
from pandas.util._decorators import Appender
3435
from textwrap import fill
3536

3637
__all__ = ["read_excel", "ExcelWriter", "ExcelFile"]
@@ -193,7 +194,6 @@ def get_writer(engine_name):
193194
raise ValueError("No Excel writer '%s'" % engine_name)
194195

195196

196-
@deprecate_kwarg('sheetname', 'sheet_name')
197197
@Appender(_read_excel_doc)
198198
def read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0,
199199
index_col=None, names=None, parse_cols=None, parse_dates=False,
@@ -202,6 +202,15 @@ def read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0,
202202
dtype=None, true_values=None, false_values=None, engine=None,
203203
squeeze=False, **kwds):
204204

205+
# Can't use _deprecate_kwarg since sheetname=None has a special meaning
206+
if is_integer(sheet_name) and sheet_name == 0 and 'sheetname' in kwds:
207+
warnings.warn("The `sheetname` keyword is deprecated, use "
208+
"`sheet_name` instead", FutureWarning, stacklevel=2)
209+
sheet_name = kwds.pop("sheetname")
210+
elif 'sheetname' in kwds:
211+
raise TypeError("Cannot specify both `sheet_name` and `sheetname`. "
212+
"Use just `sheet_name`")
213+
205214
if not isinstance(io, ExcelFile):
206215
io = ExcelFile(io, engine=engine)
207216

pandas/tests/io/test_excel.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ def test_reading_all_sheets(self):
407407
# Ensure a dict is returned.
408408
# See PR #9450
409409
basename = 'test_multisheet'
410-
dfs = self.get_exceldf(basename, sheetname=None)
410+
dfs = self.get_exceldf(basename, sheet_name=None)
411411
# ensure this is not alphabetical to test order preservation
412412
expected_keys = ['Charlie', 'Alpha', 'Beta']
413413
tm.assert_contains_all(expected_keys, dfs.keys())
@@ -424,7 +424,7 @@ def test_reading_multiple_specific_sheets(self):
424424
basename = 'test_multisheet'
425425
# Explicitly request duplicates. Only the set should be returned.
426426
expected_keys = [2, 'Charlie', 'Charlie']
427-
dfs = self.get_exceldf(basename, sheetname=expected_keys)
427+
dfs = self.get_exceldf(basename, sheet_name=expected_keys)
428428
expected_keys = list(set(expected_keys))
429429
tm.assert_contains_all(expected_keys, dfs.keys())
430430
assert len(expected_keys) == len(dfs.keys())
@@ -434,7 +434,7 @@ def test_reading_all_sheets_with_blank(self):
434434
# In the case where some sheets are blank.
435435
# Issue #11711
436436
basename = 'blank_with_header'
437-
dfs = self.get_exceldf(basename, sheetname=None)
437+
dfs = self.get_exceldf(basename, sheet_name=None)
438438
expected_keys = ['Sheet1', 'Sheet2', 'Sheet3']
439439
tm.assert_contains_all(expected_keys, dfs.keys())
440440

@@ -556,6 +556,10 @@ def test_sheet_name_and_sheetname(self):
556556
tm.assert_frame_equal(df1, dfref, check_names=False)
557557
tm.assert_frame_equal(df2, dfref, check_names=False)
558558

559+
def test_sheet_name_both_raises(self):
560+
with tm.assert_raises_regex(TypeError, "Cannot specify both"):
561+
self.get_exceldf('test1', sheetname='Sheet1', sheet_name='Sheet1')
562+
559563

560564
class XlrdTests(ReadingTestsBase):
561565
"""
@@ -589,7 +593,7 @@ def test_read_xlrd_Book(self):
589593
result = read_excel(xl, "SheetA")
590594
tm.assert_frame_equal(df, result)
591595

592-
result = read_excel(book, sheetname="SheetA", engine="xlrd")
596+
result = read_excel(book, sheet_name="SheetA", engine="xlrd")
593597
tm.assert_frame_equal(df, result)
594598

595599
@tm.network
@@ -691,7 +695,7 @@ def tdf(sheetname):
691695
with ExcelWriter(pth) as ew:
692696
for sheetname, df in iteritems(dfs):
693697
df.to_excel(ew, sheetname)
694-
dfs_returned = read_excel(pth, sheetname=sheets)
698+
dfs_returned = read_excel(pth, sheet_name=sheets)
695699
for s in sheets:
696700
tm.assert_frame_equal(dfs[s], dfs_returned[s])
697701

0 commit comments

Comments
 (0)