diff --git a/pandas/core/series.py b/pandas/core/series.py index 8716170594a80..0755866afc1d4 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -511,7 +511,10 @@ def _init_dict( elif index is not None: # fastpath for Series(data=None). Just use broadcasting a scalar # instead of reindexing. - values = na_value_for_dtype(pandas_dtype(dtype), compat=False) + if len(index) or dtype is not None: + values = na_value_for_dtype(pandas_dtype(dtype), compat=False) + else: + values = [] keys = index else: keys, values = (), [] diff --git a/pandas/tests/series/test_constructors.py b/pandas/tests/series/test_constructors.py index abb0ca5407505..65a2261d0d334 100644 --- a/pandas/tests/series/test_constructors.py +++ b/pandas/tests/series/test_constructors.py @@ -83,24 +83,27 @@ def test_unparseable_strings_with_dt64_dtype(self): # test for None or an empty generator. # test_constructor_pass_none tests None but only with the index also # passed. - (lambda: Series(), True), - (lambda: Series(None), True), - (lambda: Series({}), True), - (lambda: Series(()), False), # creates a RangeIndex - (lambda: Series([]), False), # creates a RangeIndex - (lambda: Series(_ for _ in []), False), # creates a RangeIndex - (lambda: Series(data=None), True), - (lambda: Series(data={}), True), - (lambda: Series(data=()), False), # creates a RangeIndex - (lambda: Series(data=[]), False), # creates a RangeIndex - (lambda: Series(data=(_ for _ in [])), False), # creates a RangeIndex + (lambda idx: Series(index=idx), True), + (lambda idx: Series(None, index=idx), True), + (lambda idx: Series({}, index=idx), True), + (lambda idx: Series((), index=idx), False), # creates a RangeIndex + (lambda idx: Series([], index=idx), False), # creates a RangeIndex + (lambda idx: Series((_ for _ in []), index=idx), False), # RangeIndex + (lambda idx: Series(data=None, index=idx), True), + (lambda idx: Series(data={}, index=idx), True), + (lambda idx: Series(data=(), index=idx), False), # creates a RangeIndex + (lambda idx: Series(data=[], index=idx), False), # creates a RangeIndex + (lambda idx: Series(data=(_ for _ in []), index=idx), False), # RangeIndex ], ) - def test_empty_constructor(self, constructor, check_index_type): + @pytest.mark.parametrize("empty_index", [None, []]) + def test_empty_constructor(self, constructor, check_index_type, empty_index): # TODO: share with frame test of the same name - expected = Series() - result = constructor() + # GH 49573 (addition of empty_index parameter) + expected = Series(index=empty_index) + result = constructor(empty_index) + assert result.dtype == object assert len(result.index) == 0 tm.assert_series_equal(result, expected, check_index_type=check_index_type)