From e18b7c92cd62139cb6984d5af638b9a0554ddb26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Vall=C3=A9s=20P=C3=A9rez?= Date: Sun, 16 Oct 2016 19:09:51 +0200 Subject: [PATCH] Add some checks for assuring that the left_index and right_index parameters have correct types. Tests added. --- doc/source/whatsnew/v0.19.1.txt | 7 +++++++ pandas/tools/merge.py | 9 +++++++++ pandas/tools/tests/test_merge.py | 9 +++++++++ 3 files changed, 25 insertions(+) diff --git a/doc/source/whatsnew/v0.19.1.txt b/doc/source/whatsnew/v0.19.1.txt index 5180b9a092f6c..70ee62726f34d 100644 --- a/doc/source/whatsnew/v0.19.1.txt +++ b/doc/source/whatsnew/v0.19.1.txt @@ -25,6 +25,13 @@ Performance Improvements +.. _whatsnew_0191.new_features: + +New features +~~~~~~~~~~~~ +- Add checks to assure that left_index and right_index are of type bool + + .. _whatsnew_0191.bug_fixes: diff --git a/pandas/tools/merge.py b/pandas/tools/merge.py index ce7f8908d7506..86e2e8aabbee1 100644 --- a/pandas/tools/merge.py +++ b/pandas/tools/merge.py @@ -472,6 +472,15 @@ def __init__(self, left, right, how='inner', on=None, 'can not merge DataFrame with instance of ' 'type {0}'.format(type(right))) + if not is_bool(left_index): + raise ValueError( + 'left_index parameter must be of type bool, not ' + '{0}'.format(type(left_index))) + if not is_bool(right_index): + raise ValueError( + 'right_index parameter must be of type bool, not ' + '{0}'.format(type(right_index))) + # warn user when merging between different levels if left.columns.nlevels != right.columns.nlevels: msg = ('merging between different levels can give an unintended ' diff --git a/pandas/tools/tests/test_merge.py b/pandas/tools/tests/test_merge.py index 6e36100ddd0b4..f078959608f91 100644 --- a/pandas/tools/tests/test_merge.py +++ b/pandas/tools/tests/test_merge.py @@ -109,6 +109,15 @@ def test_merge_misspecified(self): self.assertRaises(ValueError, merge, self.df, self.df2, left_on=['key1'], right_on=['key1', 'key2']) + def test_index_and_on_parameters_confusion(self): + self.assertRaises(ValueError, merge, self.df, self.df2, how='left', + left_index=False, right_index=['key1', 'key2']) + self.assertRaises(ValueError, merge, self.df, self.df2, how='left', + left_index=['key1', 'key2'], right_index=False) + self.assertRaises(ValueError, merge, self.df, self.df2, how='left', + left_index=['key1', 'key2'], + right_index=['key1', 'key2']) + def test_merge_overlap(self): merged = merge(self.left, self.left, on='key') exp_len = (self.left['key'].value_counts() ** 2).sum()