Skip to content

Commit dba9778

Browse files
committed
fixed reviewed changes and added extra test cases
1 parent 1750d6a commit dba9778

File tree

3 files changed

+87
-7
lines changed

3 files changed

+87
-7
lines changed

doc/source/whatsnew/v3.0.0.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ Reshaping
779779
- Bug in :meth:`DataFrame.pivot_table` incorrectly subaggregating results when called without an ``index`` argument (:issue:`58722`)
780780
- Bug in :meth:`DataFrame.stack` with the new implementation where ``ValueError`` is raised when ``level=[]`` (:issue:`60740`)
781781
- Bug in :meth:`DataFrame.unstack` producing incorrect results when manipulating empty :class:`DataFrame` with an :class:`ExtentionDtype` (:issue:`59123`)
782-
- Bug in :meth:`concat` where concatenating dataframe and series with ignore_index = True drops the series name (:issue:`60723`, :issue:`56257`)
782+
- Bug in :meth:`concat` where concatenating DataFrame and Series with ``ignore_index = True`` drops the series name (:issue:`60723`, :issue:`56257`)
783783

784784
Sparse
785785
^^^^^^

pandas/core/reshape/concat.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,21 +477,23 @@ def _sanitize_mixed_ndim(
477477

478478
else:
479479
name = getattr(obj, "name", None)
480-
name_none_flag = False
480+
rename_columns = False
481481
if ignore_index or name is None:
482482
if axis == 1:
483483
# doing a row-wise concatenation so need everything
484484
# to line up
485-
name = 0
485+
if name is None:
486+
name = 0
487+
rename_columns = True
486488
else:
487489
# doing a column-wise concatenation so need series
488490
# to have unique names
489491
if name is None:
490-
name_none_flag = True
492+
rename_columns = True
491493
name = current_column
492-
current_column += 1
494+
current_column += 1
493495
obj = sample._constructor(obj, copy=False)
494-
if isinstance(obj, ABCDataFrame) and name_none_flag:
496+
if isinstance(obj, ABCDataFrame) and rename_columns:
495497
obj.columns = range(name, name + 1, 1)
496498
else:
497499
obj = sample._constructor({name: obj}, copy=False)

pandas/tests/reshape/concat/test_concat.py

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,8 +955,86 @@ def test_concat_of_series_and_frame_with_names_for_ignore_index():
955955
ser = Series([4, 5], name="c")
956956
df = DataFrame({"a": [0, 1], "b": [2, 3]})
957957

958+
result = concat([df, ser])
959+
expected = DataFrame(
960+
{"a": [0, 1, None, None], "b": [2, 3, None, None], "c": [None, None, 4, 5]},
961+
index=[0, 1, 0, 1],
962+
)
963+
tm.assert_frame_equal(result, expected)
964+
965+
ser = Series([4, 5], name="c")
966+
df = DataFrame({"a": [0, 1], "b": [2, 3]})
967+
958968
result = concat([df, ser], ignore_index=True)
959969
expected = DataFrame(
960-
{"a": [0, 1, None, None], "b": [2, 3, None, None], "c": [None, None, 4, 5]}
970+
{"a": [0, 1, None, None], "b": [2, 3, None, None], "c": [None, None, 4, 5]},
971+
index=[0, 1, 2, 3],
961972
)
962973
tm.assert_frame_equal(result, expected)
974+
975+
ser = Series([4, 5])
976+
df = DataFrame({"a": [0, 1], "b": [2, 3]})
977+
978+
result = concat([df, ser, ser], axis=1)
979+
expected = DataFrame({"a": [0, 1], "b": [2, 3], 0: [4, 5], 1: [4, 5]}, index=[0, 1])
980+
tm.assert_frame_equal(result, expected)
981+
982+
ser = Series([4, 5])
983+
df = DataFrame({"a": [0, 1], "b": [2, 3]})
984+
985+
result = concat([df, ser, ser], axis=1, ignore_index=True)
986+
expected = DataFrame({0: [0, 1], 1: [2, 3], 2: [4, 5], 3: [4, 5]}, index=[0, 1])
987+
tm.assert_frame_equal(result, expected)
988+
989+
990+
@pytest.mark.parametrize(
991+
"inputs, ignore_index, axis, expected",
992+
[
993+
# Concatenating DataFrame and named Series without ignore_index
994+
(
995+
[DataFrame({"a": [0, 1], "b": [2, 3]}), Series([4, 5], name="c")],
996+
False,
997+
0,
998+
DataFrame(
999+
{
1000+
"a": [0, 1, None, None],
1001+
"b": [2, 3, None, None],
1002+
"c": [None, None, 4, 5],
1003+
},
1004+
index=[0, 1, 0, 1],
1005+
),
1006+
),
1007+
# Concatenating DataFrame and named Series with ignore_index
1008+
(
1009+
[DataFrame({"a": [0, 1], "b": [2, 3]}), Series([4, 5], name="c")],
1010+
True,
1011+
0,
1012+
DataFrame(
1013+
{
1014+
"a": [0, 1, None, None],
1015+
"b": [2, 3, None, None],
1016+
"c": [None, None, 4, 5],
1017+
},
1018+
index=[0, 1, 2, 3],
1019+
),
1020+
),
1021+
# Concatenating DataFrame and unnamed Series along columns
1022+
(
1023+
[DataFrame({"a": [0, 1], "b": [2, 3]}), Series([4, 5]), Series([4, 5])],
1024+
False,
1025+
1,
1026+
DataFrame({"a": [0, 1], "b": [2, 3], 0: [4, 5], 1: [4, 5]}, index=[0, 1]),
1027+
),
1028+
# Concatenating DataFrame and unnamed Series along columns with ignore_index
1029+
(
1030+
[DataFrame({"a": [0, 1], "b": [2, 3]}), Series([4, 5]), Series([4, 5])],
1031+
True,
1032+
1,
1033+
DataFrame({0: [0, 1], 1: [2, 3], 2: [4, 5], 3: [4, 5]}, index=[0, 1]),
1034+
),
1035+
],
1036+
)
1037+
def test_concat_of_series_and_frame(inputs, ignore_index, axis, expected):
1038+
# GH #60723 and #56257
1039+
result = concat(inputs, ignore_index=ignore_index, axis=axis)
1040+
tm.assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)