diff --git a/pandas-stubs/core/reshape/concat.pyi b/pandas-stubs/core/reshape/concat.pyi index bdd11b7e3..61e547ac8 100644 --- a/pandas-stubs/core/reshape/concat.pyi +++ b/pandas-stubs/core/reshape/concat.pyi @@ -32,7 +32,7 @@ def concat( ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., @@ -46,7 +46,7 @@ def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappin ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., @@ -60,7 +60,7 @@ def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappin ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., @@ -74,7 +74,7 @@ def concat( ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., @@ -88,7 +88,7 @@ def concat( # type: ignore[overload-overlap] ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., @@ -102,7 +102,7 @@ def concat( # type: ignore[overload-overlap] ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., @@ -119,7 +119,7 @@ def concat( ignore_index: bool = ..., keys: Iterable[HashableT2] = ..., levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., - names: list[HashableT4] = ..., + names: list[HashableT4] | None = ..., verify_integrity: bool = ..., sort: bool = ..., copy: bool = ..., diff --git a/tests/test_pandas.py b/tests/test_pandas.py index fddce825e..8bb108498 100644 --- a/tests/test_pandas.py +++ b/tests/test_pandas.py @@ -98,6 +98,13 @@ def test_types_concat() -> None: ), pd.Series, ) + check( + assert_type( + pd.concat([s, s2], keys=["first", "second"], names=None), + pd.Series, + ), + pd.Series, + ) # Depends on the axis check( @@ -140,6 +147,13 @@ def test_types_concat() -> None: ), pd.DataFrame, ) + check( + assert_type( + pd.concat([df, df2], keys=["first", "second"], names=None), + pd.DataFrame, + ), + pd.DataFrame, + ) check( assert_type( @@ -189,6 +203,12 @@ def test_concat_args() -> None: ), pd.DataFrame, ) + check( + assert_type( + pd.concat([df, df2], keys=["df1", "df2"], names=None), pd.DataFrame + ), + pd.DataFrame, + ) check( assert_type( pd.concat([df, df2], keys=["df1", "df2"], names=[pd.Timedelta(1, "D")]), @@ -248,6 +268,18 @@ def test_concat_args() -> None: ), pd.DataFrame, ) + check( + assert_type( + pd.concat( + [df, df2, df, df2], + keys=[("foo", "one"), ("foo", "two"), ("baz", "one"), ("baz", "two")], + levels=levels, + names=None, + ), + pd.DataFrame, + ), + pd.DataFrame, + ) check( assert_type(