diff --git a/pandas/core/series.py b/pandas/core/series.py index f0f5bd7c3e2b2..a53d65edabec2 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -4604,8 +4604,17 @@ def set_axis(self, labels, axis: Axis = 0, inplace: bool = False): optional_labels=_shared_doc_kwargs["optional_labels"], optional_axis=_shared_doc_kwargs["optional_axis"], ) - def reindex(self, index=None, **kwargs): - return super().reindex(index=index, **kwargs) + def reindex(self, *args, **kwargs) -> Series: + if len(args) > 1: + raise TypeError("Only one positional argument ('index') is allowed") + if args: + (index,) = args + if "index" in kwargs: + raise TypeError( + "'index' passed as both positional and keyword argument" + ) + kwargs.update({"index": index}) + return super().reindex(**kwargs) @deprecate_nonkeyword_arguments(version=None, allowed_args=["self", "labels"]) def drop( diff --git a/pandas/tests/series/methods/test_reindex.py b/pandas/tests/series/methods/test_reindex.py index be9f96c8b509a..4350a5d9ac989 100644 --- a/pandas/tests/series/methods/test_reindex.py +++ b/pandas/tests/series/methods/test_reindex.py @@ -348,6 +348,31 @@ def test_reindex_periodindex_with_object(p_values, o_values, values, expected_va tm.assert_series_equal(result, expected) +def test_reindex_too_many_args(): + # GH 40980 + ser = Series([1, 2]) + with pytest.raises( + TypeError, match=r"Only one positional argument \('index'\) is allowed" + ): + ser.reindex([2, 3], False) + + +def test_reindex_double_index(): + # GH 40980 + ser = Series([1, 2]) + msg = r"'index' passed as both positional and keyword argument" + with pytest.raises(TypeError, match=msg): + ser.reindex([2, 3], index=[3, 4]) + + +def test_reindex_no_posargs(): + # GH 40980 + ser = Series([1, 2]) + result = ser.reindex(index=[1, 0]) + expected = Series([2, 1], index=[1, 0]) + tm.assert_series_equal(result, expected) + + @pytest.mark.parametrize("values", [[["a"], ["x"]], [[], []]]) def test_reindex_empty_with_level(values): # GH41170