Skip to content

Commit b313852

Browse files
fix suffix with none
1 parent 512830b commit b313852

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

pandas/core/reshape/merge.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,15 @@ def __init__(self, left, right, how='inner', on=None,
488488
self.right_on = com.maybe_make_list(right_on)
489489

490490
self.copy = copy
491+
492+
if suffixes == (None, None):
493+
raise ValueError('Column names cannot be identical after merging.')
494+
if suffixes[0] is None:
495+
suffixes = ('', suffixes[1])
496+
elif suffixes[1] is None:
497+
suffixes = (suffixes[0], '')
491498
self.suffixes = suffixes
499+
492500
self.sort = sort
493501

494502
self.left_index = left_index

pandas/tests/reshape/merge/test_merge.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from pandas.core.reshape.concat import concat
2323
from pandas.core.reshape.merge import MergeError, merge
2424
import pandas.util.testing as tm
25-
from pandas.util.testing import assert_frame_equal, assert_series_equal
25+
from pandas.util.testing import assert_frame_equal, assert_series_equal, assert_index_equal
2626

2727
N = 50
2828
NGROUPS = 8
@@ -1442,3 +1442,20 @@ def test_merge_series(on, left_on, right_on, left_index, right_index, nm):
14421442
with pytest.raises(ValueError, match='a Series without a name'):
14431443
result = pd.merge(a, b, on=on, left_on=left_on, right_on=right_on,
14441444
left_index=left_index, right_index=right_index)
1445+
1446+
1447+
@pytest.mark.parametrize("col1, col2, suffixes, expected_cols", [
1448+
(0, 0, ("", "_dup"), ["0", "0_dup"]),
1449+
(0, 0, (None, "_dup"), ["0", "0_dup"]),
1450+
(0, 0, ("_x", "_y"), ["0_x", "0_y"]),
1451+
("a", 0, (None, "_y"), ["a", 0])
1452+
])
1453+
def test_merge_suffix(col1, col2, suffixes, expected_cols):
1454+
a = pd.DataFrame({col1: [1, 2, 3]})
1455+
b = pd.DataFrame({col2: [4, 5, 6]})
1456+
1457+
suffix_df = a.merge(b, left_index=True, right_index=True, suffixes=suffixes)
1458+
assert suffix_df.columns.tolist() == expected_cols
1459+
1460+
with pytest.raises(ValueError):
1461+
a.merge(b, left_index=True, right_index=True, suffixes=(None, None))

0 commit comments

Comments
 (0)