diff --git a/doc/source/whatsnew/v2.2.0.rst b/doc/source/whatsnew/v2.2.0.rst index f03a091541d03..15326aae428d4 100644 --- a/doc/source/whatsnew/v2.2.0.rst +++ b/doc/source/whatsnew/v2.2.0.rst @@ -134,6 +134,7 @@ Deprecations - Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_clipboard`. (:issue:`54229`) - Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_csv` except ``path_or_buf``. (:issue:`54229`) - Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_dict`. (:issue:`54229`) +- Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_excel` except ``excel_writer``. (:issue:`54229`) - Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_gbq` except ``destination_table``. (:issue:`54229`) - Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_hdf` except ``path_or_buf``. (:issue:`54229`) - Deprecated allowing non-keyword arguments in :meth:`DataFrame.to_html` except ``buf``. (:issue:`54229`) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index a763d46e11939..6e4d3610f4ffa 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2187,6 +2187,9 @@ def _repr_data_resource_(self): # I/O Methods @final + @deprecate_nonkeyword_arguments( + version="3.0", allowed_args=["self", "excel_writer"], name="to_excel" + ) @doc( klass="object", storage_options=_shared_docs["storage_options"], diff --git a/pandas/tests/io/excel/test_openpyxl.py b/pandas/tests/io/excel/test_openpyxl.py index b8d41164792e0..da94c74f2303e 100644 --- a/pandas/tests/io/excel/test_openpyxl.py +++ b/pandas/tests/io/excel/test_openpyxl.py @@ -241,7 +241,7 @@ def test_if_sheet_exists_raises(ext, if_sheet_exists, msg): df = DataFrame({"fruit": ["pear"]}) with tm.ensure_clean(ext) as f: with pytest.raises(ValueError, match=re.escape(msg)): - df.to_excel(f, "foo", engine="openpyxl") + df.to_excel(f, sheet_name="foo", engine="openpyxl") with ExcelWriter( f, engine="openpyxl", mode="a", if_sheet_exists=if_sheet_exists ) as writer: diff --git a/pandas/tests/io/excel/test_readers.py b/pandas/tests/io/excel/test_readers.py index 20bc6e98577d5..6db70c894f692 100644 --- a/pandas/tests/io/excel/test_readers.py +++ b/pandas/tests/io/excel/test_readers.py @@ -591,7 +591,7 @@ def test_dtype_backend(self, read_ext, dtype_backend): } ) with tm.ensure_clean(read_ext) as file_path: - df.to_excel(file_path, "test", index=False) + df.to_excel(file_path, sheet_name="test", index=False) result = pd.read_excel( file_path, sheet_name="test", dtype_backend=dtype_backend ) @@ -623,7 +623,7 @@ def test_dtype_backend_and_dtype(self, read_ext): df = DataFrame({"a": [np.nan, 1.0], "b": [2.5, np.nan]}) with tm.ensure_clean(read_ext) as file_path: - df.to_excel(file_path, "test", index=False) + df.to_excel(file_path, sheet_name="test", index=False) result = pd.read_excel( file_path, sheet_name="test", @@ -647,7 +647,7 @@ def test_dtype_backend_string(self, read_ext, string_storage): } ) with tm.ensure_clean(read_ext) as file_path: - df.to_excel(file_path, "test", index=False) + df.to_excel(file_path, sheet_name="test", index=False) result = pd.read_excel( file_path, sheet_name="test", dtype_backend="numpy_nullable" ) diff --git a/pandas/tests/io/excel/test_writers.py b/pandas/tests/io/excel/test_writers.py index 905c733ea5ef1..9cbb29605a1ec 100644 --- a/pandas/tests/io/excel/test_writers.py +++ b/pandas/tests/io/excel/test_writers.py @@ -79,7 +79,7 @@ def test_read_one_empty_col_no_header(self, ext, header, expected): df = DataFrame([["", 1, 100], ["", 2, 200], ["", 3, 300], ["", 4, 400]]) with tm.ensure_clean(ext) as path: - df.to_excel(path, filename, index=False, header=False) + df.to_excel(path, sheet_name=filename, index=False, header=False) result = pd.read_excel( path, sheet_name=filename, usecols=[0], header=header ) @@ -95,7 +95,7 @@ def test_read_one_empty_col_with_header(self, ext, header, expected): df = DataFrame([["", 1, 100], ["", 2, 200], ["", 3, 300], ["", 4, 400]]) with tm.ensure_clean(ext) as path: - df.to_excel(path, "with_header", index=False, header=True) + df.to_excel(path, sheet_name="with_header", index=False, header=True) result = pd.read_excel( path, sheet_name=filename, usecols=[0], header=header ) @@ -109,8 +109,10 @@ def test_set_column_names_in_parameter(self, ext): with tm.ensure_clean(ext) as pth: with ExcelWriter(pth) as writer: - refdf.to_excel(writer, "Data_no_head", header=False, index=False) - refdf.to_excel(writer, "Data_with_head", index=False) + refdf.to_excel( + writer, sheet_name="Data_no_head", header=False, index=False + ) + refdf.to_excel(writer, sheet_name="Data_with_head", index=False) refdf.columns = ["A", "B"] @@ -145,7 +147,7 @@ def tdf(col_sheet_name): with tm.ensure_clean(ext) as pth: with ExcelWriter(pth) as ew: for sheetname, df in dfs.items(): - df.to_excel(ew, sheetname) + df.to_excel(ew, sheet_name=sheetname) dfs_returned = pd.read_excel(pth, sheet_name=sheets, index_col=0) @@ -371,10 +373,10 @@ def test_excel_sheet_by_name_raise(self, path): def test_excel_writer_context_manager(self, frame, path): with ExcelWriter(path) as writer: - frame.to_excel(writer, "Data1") + frame.to_excel(writer, sheet_name="Data1") frame2 = frame.copy() frame2.columns = frame.columns[::-1] - frame2.to_excel(writer, "Data2") + frame2.to_excel(writer, sheet_name="Data2") with ExcelFile(path) as reader: found_df = pd.read_excel(reader, sheet_name="Data1", index_col=0) @@ -387,42 +389,42 @@ def test_roundtrip(self, frame, path): frame = frame.copy() frame.iloc[:5, frame.columns.get_loc("A")] = np.nan - frame.to_excel(path, "test1") - frame.to_excel(path, "test1", columns=["A", "B"]) - frame.to_excel(path, "test1", header=False) - frame.to_excel(path, "test1", index=False) + frame.to_excel(path, sheet_name="test1") + frame.to_excel(path, sheet_name="test1", columns=["A", "B"]) + frame.to_excel(path, sheet_name="test1", header=False) + frame.to_excel(path, sheet_name="test1", index=False) # test roundtrip - frame.to_excel(path, "test1") + frame.to_excel(path, sheet_name="test1") recons = pd.read_excel(path, sheet_name="test1", index_col=0) tm.assert_frame_equal(frame, recons) - frame.to_excel(path, "test1", index=False) + frame.to_excel(path, sheet_name="test1", index=False) recons = pd.read_excel(path, sheet_name="test1", index_col=None) recons.index = frame.index tm.assert_frame_equal(frame, recons) - frame.to_excel(path, "test1", na_rep="NA") + frame.to_excel(path, sheet_name="test1", na_rep="NA") recons = pd.read_excel(path, sheet_name="test1", index_col=0, na_values=["NA"]) tm.assert_frame_equal(frame, recons) # GH 3611 - frame.to_excel(path, "test1", na_rep="88") + frame.to_excel(path, sheet_name="test1", na_rep="88") recons = pd.read_excel(path, sheet_name="test1", index_col=0, na_values=["88"]) tm.assert_frame_equal(frame, recons) - frame.to_excel(path, "test1", na_rep="88") + frame.to_excel(path, sheet_name="test1", na_rep="88") recons = pd.read_excel( path, sheet_name="test1", index_col=0, na_values=[88, 88.0] ) tm.assert_frame_equal(frame, recons) # GH 6573 - frame.to_excel(path, "Sheet1") + frame.to_excel(path, sheet_name="Sheet1") recons = pd.read_excel(path, index_col=0) tm.assert_frame_equal(frame, recons) - frame.to_excel(path, "0") + frame.to_excel(path, sheet_name="0") recons = pd.read_excel(path, index_col=0) tm.assert_frame_equal(frame, recons) @@ -436,7 +438,7 @@ def test_mixed(self, frame, path): mixed_frame = frame.copy() mixed_frame["foo"] = "bar" - mixed_frame.to_excel(path, "test1") + mixed_frame.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) tm.assert_frame_equal(mixed_frame, recons) @@ -448,7 +450,7 @@ def test_ts_frame(self, tsframe, path): index = pd.DatetimeIndex(np.asarray(df.index), freq=None) df.index = index - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) tm.assert_frame_equal(df, recons) @@ -456,10 +458,10 @@ def test_ts_frame(self, tsframe, path): def test_basics_with_nan(self, frame, path): frame = frame.copy() frame.iloc[:5, frame.columns.get_loc("A")] = np.nan - frame.to_excel(path, "test1") - frame.to_excel(path, "test1", columns=["A", "B"]) - frame.to_excel(path, "test1", header=False) - frame.to_excel(path, "test1", index=False) + frame.to_excel(path, sheet_name="test1") + frame.to_excel(path, sheet_name="test1", columns=["A", "B"]) + frame.to_excel(path, sheet_name="test1", header=False) + frame.to_excel(path, sheet_name="test1", index=False) @pytest.mark.parametrize("np_type", [np.int8, np.int16, np.int32, np.int64]) def test_int_types(self, np_type, path): @@ -468,7 +470,7 @@ def test_int_types(self, np_type, path): df = DataFrame( np.random.default_rng(2).integers(-10, 10, size=(10, 2)), dtype=np_type ) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) @@ -483,7 +485,7 @@ def test_int_types(self, np_type, path): def test_float_types(self, np_type, path): # Test np.float values read come back as float. df = DataFrame(np.random.default_rng(2).random(10), dtype=np_type) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0).astype( @@ -495,7 +497,7 @@ def test_float_types(self, np_type, path): def test_bool_types(self, path): # Test np.bool_ values read come back as float. df = DataFrame([1, 0, True, False], dtype=np.bool_) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0).astype( @@ -506,7 +508,7 @@ def test_bool_types(self, path): def test_inf_roundtrip(self, path): df = DataFrame([(1, np.inf), (2, 3), (5, -np.inf)]) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) @@ -521,15 +523,15 @@ def test_sheets(self, frame, tsframe, path): frame = frame.copy() frame.iloc[:5, frame.columns.get_loc("A")] = np.nan - frame.to_excel(path, "test1") - frame.to_excel(path, "test1", columns=["A", "B"]) - frame.to_excel(path, "test1", header=False) - frame.to_excel(path, "test1", index=False) + frame.to_excel(path, sheet_name="test1") + frame.to_excel(path, sheet_name="test1", columns=["A", "B"]) + frame.to_excel(path, sheet_name="test1", header=False) + frame.to_excel(path, sheet_name="test1", index=False) # Test writing to separate sheets with ExcelWriter(path) as writer: - frame.to_excel(writer, "test1") - tsframe.to_excel(writer, "test2") + frame.to_excel(writer, sheet_name="test1") + tsframe.to_excel(writer, sheet_name="test2") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) tm.assert_frame_equal(frame, recons) @@ -543,14 +545,14 @@ def test_colaliases(self, frame, path): frame = frame.copy() frame.iloc[:5, frame.columns.get_loc("A")] = np.nan - frame.to_excel(path, "test1") - frame.to_excel(path, "test1", columns=["A", "B"]) - frame.to_excel(path, "test1", header=False) - frame.to_excel(path, "test1", index=False) + frame.to_excel(path, sheet_name="test1") + frame.to_excel(path, sheet_name="test1", columns=["A", "B"]) + frame.to_excel(path, sheet_name="test1", header=False) + frame.to_excel(path, sheet_name="test1", index=False) # column aliases col_aliases = Index(["AA", "X", "Y", "Z"]) - frame.to_excel(path, "test1", header=col_aliases) + frame.to_excel(path, sheet_name="test1", header=col_aliases) with ExcelFile(path) as reader: rs = pd.read_excel(reader, sheet_name="test1", index_col=0) xp = frame.copy() @@ -561,14 +563,16 @@ def test_roundtrip_indexlabels(self, merge_cells, frame, path): frame = frame.copy() frame.iloc[:5, frame.columns.get_loc("A")] = np.nan - frame.to_excel(path, "test1") - frame.to_excel(path, "test1", columns=["A", "B"]) - frame.to_excel(path, "test1", header=False) - frame.to_excel(path, "test1", index=False) + frame.to_excel(path, sheet_name="test1") + frame.to_excel(path, sheet_name="test1", columns=["A", "B"]) + frame.to_excel(path, sheet_name="test1", header=False) + frame.to_excel(path, sheet_name="test1", index=False) # test index_label df = DataFrame(np.random.default_rng(2).standard_normal((10, 2))) >= 0 - df.to_excel(path, "test1", index_label=["test"], merge_cells=merge_cells) + df.to_excel( + path, sheet_name="test1", index_label=["test"], merge_cells=merge_cells + ) with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0).astype( np.int64 @@ -579,7 +583,7 @@ def test_roundtrip_indexlabels(self, merge_cells, frame, path): df = DataFrame(np.random.default_rng(2).standard_normal((10, 2))) >= 0 df.to_excel( path, - "test1", + sheet_name="test1", index_label=["test", "dummy", "dummy2"], merge_cells=merge_cells, ) @@ -591,7 +595,9 @@ def test_roundtrip_indexlabels(self, merge_cells, frame, path): assert df.index.names == recons.index.names df = DataFrame(np.random.default_rng(2).standard_normal((10, 2))) >= 0 - df.to_excel(path, "test1", index_label="test", merge_cells=merge_cells) + df.to_excel( + path, sheet_name="test1", index_label="test", merge_cells=merge_cells + ) with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0).astype( np.int64 @@ -601,7 +607,7 @@ def test_roundtrip_indexlabels(self, merge_cells, frame, path): frame.to_excel( path, - "test1", + sheet_name="test1", columns=["A", "B", "C", "D"], index=False, merge_cells=merge_cells, @@ -636,7 +642,7 @@ def test_excel_roundtrip_datetime(self, merge_cells, tsframe, path): tsf = tsframe.copy() tsf.index = [x.date() for x in tsframe.index] - tsf.to_excel(path, "test1", merge_cells=merge_cells) + tsf.to_excel(path, sheet_name="test1", merge_cells=merge_cells) with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) @@ -666,14 +672,14 @@ def test_excel_date_datetime_format(self, ext, path): with tm.ensure_clean(ext) as filename2: with ExcelWriter(path) as writer1: - df.to_excel(writer1, "test1") + df.to_excel(writer1, sheet_name="test1") with ExcelWriter( filename2, date_format="DD.MM.YYYY", datetime_format="DD.MM.YYYY HH-MM-SS", ) as writer2: - df.to_excel(writer2, "test1") + df.to_excel(writer2, sheet_name="test1") with ExcelFile(path) as reader1: rs1 = pd.read_excel(reader1, sheet_name="test1", index_col=0) @@ -699,7 +705,7 @@ def test_to_excel_interval_no_labels(self, path): df["new"] = pd.cut(df[0], 10) expected["new"] = pd.cut(expected[0], 10).astype(str) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) tm.assert_frame_equal(expected, recons) @@ -718,7 +724,7 @@ def test_to_excel_interval_labels(self, path): df["new"] = intervals expected["new"] = pd.Series(list(intervals)) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) tm.assert_frame_equal(expected, recons) @@ -739,7 +745,7 @@ def test_to_excel_timedelta(self, path): lambda x: timedelta(seconds=x).total_seconds() / 86400 ) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=0) tm.assert_frame_equal(expected, recons) @@ -747,7 +753,7 @@ def test_to_excel_timedelta(self, path): def test_to_excel_periodindex(self, tsframe, path): xp = tsframe.resample("M", kind="period").mean() - xp.to_excel(path, "sht1") + xp.to_excel(path, sheet_name="sht1") with ExcelFile(path) as reader: rs = pd.read_excel(reader, sheet_name="sht1", index_col=0) @@ -758,11 +764,11 @@ def test_to_excel_multiindex(self, merge_cells, frame, path): new_index = MultiIndex.from_arrays(arrays, names=["first", "second"]) frame.index = new_index - frame.to_excel(path, "test1", header=False) - frame.to_excel(path, "test1", columns=["A", "B"]) + frame.to_excel(path, sheet_name="test1", header=False) + frame.to_excel(path, sheet_name="test1", columns=["A", "B"]) # round trip - frame.to_excel(path, "test1", merge_cells=merge_cells) + frame.to_excel(path, sheet_name="test1", merge_cells=merge_cells) with ExcelFile(path) as reader: df = pd.read_excel(reader, sheet_name="test1", index_col=[0, 1]) tm.assert_frame_equal(frame, df) @@ -797,7 +803,7 @@ def test_to_excel_multiindex_cols(self, merge_cells, frame, path): header = 0 # round trip - frame.to_excel(path, "test1", merge_cells=merge_cells) + frame.to_excel(path, sheet_name="test1", merge_cells=merge_cells) with ExcelFile(path) as reader: df = pd.read_excel( reader, sheet_name="test1", header=header, index_col=[0, 1] @@ -813,7 +819,7 @@ def test_to_excel_multiindex_dates(self, merge_cells, tsframe, path): tsframe.index = MultiIndex.from_arrays(new_index) tsframe.index.names = ["time", "foo"] - tsframe.to_excel(path, "test1", merge_cells=merge_cells) + tsframe.to_excel(path, sheet_name="test1", merge_cells=merge_cells) with ExcelFile(path) as reader: recons = pd.read_excel(reader, sheet_name="test1", index_col=[0, 1]) @@ -832,7 +838,7 @@ def test_to_excel_multiindex_no_write_index(self, path): frame2.index = multi_index # Write out to Excel without the index. - frame2.to_excel(path, "test1", index=False) + frame2.to_excel(path, sheet_name="test1", index=False) # Read it back in. with ExcelFile(path) as reader: @@ -846,7 +852,7 @@ def test_to_excel_empty_multiindex(self, path): expected = DataFrame([], columns=[0, 1, 2]) df = DataFrame([], index=MultiIndex.from_tuples([], names=[0, 1]), columns=[2]) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") with ExcelFile(path) as reader: result = pd.read_excel(reader, sheet_name="test1") @@ -860,7 +866,7 @@ def test_to_excel_float_format(self, path): index=["A", "B"], columns=["X", "Y", "Z"], ) - df.to_excel(path, "test1", float_format="%.2f") + df.to_excel(path, sheet_name="test1", float_format="%.2f") with ExcelFile(path) as reader: result = pd.read_excel(reader, sheet_name="test1", index_col=0) @@ -898,7 +904,7 @@ def test_to_excel_unicode_filename(self, ext): index=["A", "B"], columns=["X", "Y", "Z"], ) - df.to_excel(filename, "test1", float_format="%.2f") + df.to_excel(filename, sheet_name="test1", float_format="%.2f") with ExcelFile(filename) as reader: result = pd.read_excel(reader, sheet_name="test1", index_col=0) @@ -968,7 +974,7 @@ def roundtrip(data, header=True, parser_hdr=0, index=True): def test_duplicated_columns(self, path): # see gh-5235 df = DataFrame([[1, 2, 3], [1, 2, 3], [1, 2, 3]], columns=["A", "B", "B"]) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") expected = DataFrame( [[1, 2, 3], [1, 2, 3], [1, 2, 3]], columns=["A", "B", "B.1"] ) @@ -979,7 +985,7 @@ def test_duplicated_columns(self, path): # see gh-11007, gh-10970 df = DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=["A", "B", "A", "B"]) - df.to_excel(path, "test1") + df.to_excel(path, sheet_name="test1") result = pd.read_excel(path, sheet_name="test1", index_col=0) expected = DataFrame( @@ -988,7 +994,7 @@ def test_duplicated_columns(self, path): tm.assert_frame_equal(result, expected) # see gh-10982 - df.to_excel(path, "test1", index=False, header=False) + df.to_excel(path, sheet_name="test1", index=False, header=False) result = pd.read_excel(path, sheet_name="test1", header=None) expected = DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]]) @@ -997,7 +1003,7 @@ def test_duplicated_columns(self, path): def test_swapped_columns(self, path): # Test for issue #5427. write_frame = DataFrame({"A": [1, 1, 1], "B": [2, 2, 2]}) - write_frame.to_excel(path, "test1", columns=["B", "A"]) + write_frame.to_excel(path, sheet_name="test1", columns=["B", "A"]) read_frame = pd.read_excel(path, sheet_name="test1", header=0) @@ -1009,12 +1015,12 @@ def test_invalid_columns(self, path): write_frame = DataFrame({"A": [1, 1, 1], "B": [2, 2, 2]}) with pytest.raises(KeyError, match="Not all names specified"): - write_frame.to_excel(path, "test1", columns=["B", "C"]) + write_frame.to_excel(path, sheet_name="test1", columns=["B", "C"]) with pytest.raises( KeyError, match="'passes columns are not ALL present dataframe'" ): - write_frame.to_excel(path, "test1", columns=["C", "D"]) + write_frame.to_excel(path, sheet_name="test1", columns=["C", "D"]) @pytest.mark.parametrize( "to_excel_index,read_excel_index_col", @@ -1027,7 +1033,7 @@ def test_write_subset_columns(self, path, to_excel_index, read_excel_index_col): # GH 31677 write_frame = DataFrame({"A": [1, 1, 1], "B": [2, 2, 2], "C": [3, 3, 3]}) write_frame.to_excel( - path, "col_subset_bug", columns=["A", "B"], index=to_excel_index + path, sheet_name="col_subset_bug", columns=["A", "B"], index=to_excel_index ) expected = write_frame[["A", "B"]] @@ -1044,7 +1050,7 @@ def test_comment_arg(self, path): # Create file to read in. df = DataFrame({"A": ["one", "#one", "one"], "B": ["two", "two", "#two"]}) - df.to_excel(path, "test_c") + df.to_excel(path, sheet_name="test_c") # Read file without comment arg. result1 = pd.read_excel(path, sheet_name="test_c", index_col=0) @@ -1062,7 +1068,7 @@ def test_comment_default(self, path): # Create file to read in df = DataFrame({"A": ["one", "#one", "one"], "B": ["two", "two", "#two"]}) - df.to_excel(path, "test_c") + df.to_excel(path, sheet_name="test_c") # Read file with default and explicit comment=None result1 = pd.read_excel(path, sheet_name="test_c") @@ -1076,7 +1082,7 @@ def test_comment_used(self, path): # Create file to read in. df = DataFrame({"A": ["one", "#one", "one"], "B": ["two", "two", "#two"]}) - df.to_excel(path, "test_c") + df.to_excel(path, sheet_name="test_c") # Test read_frame_comment against manually produced expected output. expected = DataFrame({"A": ["one", None, "one"], "B": ["two", None, None]}) @@ -1112,7 +1118,7 @@ def test_datetimes(self, path): ] write_frame = DataFrame({"A": datetimes}) - write_frame.to_excel(path, "Sheet1") + write_frame.to_excel(path, sheet_name="Sheet1") read_frame = pd.read_excel(path, sheet_name="Sheet1", header=0) tm.assert_series_equal(write_frame["A"], read_frame["A"]) @@ -1171,7 +1177,7 @@ def test_write_lists_dict(self, path): "str": ["apple", "banana", "cherry"], } ) - df.to_excel(path, "Sheet1") + df.to_excel(path, sheet_name="Sheet1") read = pd.read_excel(path, sheet_name="Sheet1", header=0, index_col=0) expected = df.copy() @@ -1183,7 +1189,7 @@ def test_write_lists_dict(self, path): def test_render_as_column_name(self, path): # see gh-34331 df = DataFrame({"render": [1, 2], "data": [3, 4]}) - df.to_excel(path, "Sheet1") + df.to_excel(path, sheet_name="Sheet1") read = pd.read_excel(path, "Sheet1", index_col=0) expected = df tm.assert_frame_equal(read, expected) @@ -1202,7 +1208,7 @@ def test_true_and_false_value_options(self, path): def test_freeze_panes(self, path): # see gh-15160 expected = DataFrame([[1, 2], [3, 4]], columns=["col1", "col2"]) - expected.to_excel(path, "Sheet1", freeze_panes=(1, 1)) + expected.to_excel(path, sheet_name="Sheet1", freeze_panes=(1, 1)) result = pd.read_excel(path, index_col=0) tm.assert_frame_equal(result, expected) @@ -1372,6 +1378,18 @@ def test_excelwriter_fspath(self): with ExcelWriter(path) as writer: assert os.fspath(writer) == str(path) + def test_to_excel_pos_args_deprecation(self): + # GH-54229 + df = DataFrame({"a": [1, 2, 3]}) + msg = ( + r"Starting with pandas version 3.0 all arguments of to_excel except " + r"for the argument 'excel_writer' will be keyword-only." + ) + with tm.assert_produces_warning(FutureWarning, match=msg): + buf = BytesIO() + writer = ExcelWriter(buf) + df.to_excel(writer, "Sheet_name_1") + @pytest.mark.parametrize("klass", _writers.values()) def test_subclass_attr(klass):