Skip to content

Commit abd1f67

Browse files
committed
TST: unit test for #1307
1 parent e9e978e commit abd1f67

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

pandas/tools/merge.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ def merge(left, right, how='inner', on=None, left_on=None, right_on=None,
3333
if __debug__: merge.__doc__ = _merge_doc % '\nleft : DataFrame'
3434

3535

36+
class MergeError(Exception):
37+
pass
38+
39+
3640
def ordered_merge(left, right, on=None, left_by=None, right_by=None,
3741
left_on=None, right_on=None,
3842
fill_method=None, suffixes=('_x', '_y')):
@@ -359,19 +363,19 @@ def _validate_specification(self):
359363
self.left_on, self.right_on = (), ()
360364
elif self.left_index:
361365
if self.right_on is None:
362-
raise Exception('Must pass right_on or right_index=True')
366+
raise MergeError('Must pass right_on or right_index=True')
363367
elif self.right_index:
364368
if self.left_on is None:
365-
raise Exception('Must pass left_on or left_index=True')
369+
raise MergeError('Must pass left_on or left_index=True')
366370
else:
367371
# use the common columns
368372
common_cols = self.left.columns.intersection(self.right.columns)
369373
if len(common_cols) == 0:
370-
raise Exception('No common columns to perform merge on')
374+
raise MergeError('No common columns to perform merge on')
371375
self.left_on = self.right_on = common_cols
372376
elif self.on is not None:
373377
if self.left_on is not None or self.right_on is not None:
374-
raise Exception('Can only pass on OR left_on and '
378+
raise MergeError('Can only pass on OR left_on and '
375379
'right_on')
376380
self.left_on = self.right_on = self.on
377381
elif self.left_on is not None:
@@ -420,7 +424,7 @@ def _get_group_keys(self):
420424
max_groups *= long(x)
421425

422426
if max_groups > 2**63: # pragma: no cover
423-
raise Exception('Combinatorial explosion! (boom)')
427+
raise MergeError('Combinatorial explosion! (boom)')
424428

425429
left_group_key, right_group_key, max_groups = \
426430
_factorize_keys(left_group_key, right_group_key,
@@ -591,7 +595,7 @@ class _BlockJoinOperation(object):
591595
"""
592596
def __init__(self, data_list, join_index, indexers, axis=1, copy=True):
593597
if axis <= 0: # pragma: no cover
594-
raise Exception('Only axis >= 1 supported for this operation')
598+
raise MergeError('Only axis >= 1 supported for this operation')
595599

596600
assert(len(data_list) == len(indexers))
597601

pandas/tools/tests/test_merge.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
import nose
44
import unittest
55

6+
from datetime import datetime
67
from numpy.random import randn
78
from numpy import nan
89
import numpy as np
910
import random
1011

1112
from pandas import *
1213
from pandas.tseries.index import DatetimeIndex
13-
from pandas.tools.merge import merge, concat, ordered_merge
14+
from pandas.tools.merge import merge, concat, ordered_merge, MergeError
1415
from pandas.util.testing import (assert_frame_equal, assert_series_equal,
1516
assert_almost_equal, rands)
1617
import pandas._tseries as lib
@@ -656,6 +657,27 @@ def test_left_merge_na_buglet(self):
656657
expected = left.join(rdf)
657658
tm.assert_frame_equal(merged, expected)
658659

660+
def test_mixed_type_join_with_suffix(self):
661+
# GH #916
662+
df = DataFrame(np.random.randn(20, 6),
663+
columns=['a', 'b', 'c', 'd', 'e', 'f'])
664+
df.insert(0, 'id', 0)
665+
df.insert(5, 'dt', 'foo')
666+
667+
grouped = df.groupby('id')
668+
mn = grouped.mean()
669+
cn = grouped.count()
670+
671+
# it works!
672+
mn.join(cn, rsuffix='_right')
673+
674+
def test_no_overlap_more_informative_error(self):
675+
dt = datetime.now()
676+
df1 = DataFrame({'x': ['a']}, index=[dt])
677+
678+
df2 = DataFrame({'y': ['b', 'c']}, index=[dt, dt])
679+
self.assertRaises(MergeError, merge, df1, df2)
680+
659681
def _check_join(left, right, result, join_col, how='left',
660682
lsuffix='_x', rsuffix='_y'):
661683

@@ -1235,20 +1257,6 @@ def test_concat_exclude_none(self):
12351257
tm.assert_frame_equal(result, df)
12361258
self.assertRaises(Exception, concat, [None, None])
12371259

1238-
def test_mixed_type_join_with_suffix(self):
1239-
# GH #916
1240-
df = DataFrame(np.random.randn(20, 6),
1241-
columns=['a', 'b', 'c', 'd', 'e', 'f'])
1242-
df.insert(0, 'id', 0)
1243-
df.insert(5, 'dt', 'foo')
1244-
1245-
grouped = df.groupby('id')
1246-
mn = grouped.mean()
1247-
cn = grouped.count()
1248-
1249-
# it works!
1250-
mn.join(cn, rsuffix='_right')
1251-
12521260

12531261
class TestOrderedMerge(unittest.TestCase):
12541262

0 commit comments

Comments
 (0)