Skip to content

Commit 85ad2b7

Browse files
committed
Merge pull request #8042 from artemyk/fix-assert_frame_equal-multiindex-dtypes
Fix testing multiindex dtypes in assert_frame_equal and assert_series_equal
2 parents c0163a2 + 24aa47c commit 85ad2b7

File tree

2 files changed

+55
-8
lines changed

2 files changed

+55
-8
lines changed

pandas/tests/test_testing.py

+43-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
import nose
77
import numpy as np
88
import sys
9-
from pandas import Series
9+
from pandas import Series, DataFrame
1010
from pandas.util.testing import (
11-
assert_almost_equal, assertRaisesRegexp, raise_with_traceback, assert_series_equal,
11+
assert_almost_equal, assertRaisesRegexp, raise_with_traceback,
12+
assert_series_equal, assert_frame_equal,
1213
RNGContext
1314
)
1415

@@ -174,6 +175,46 @@ def test_less_precise(self):
174175
self.assertRaises(AssertionError, assert_series_equal, s1, s2)
175176
self.assertRaises(AssertionError, assert_series_equal, s1, s2, True)
176177

178+
def test_index_dtype(self):
179+
df1 = DataFrame.from_records(
180+
{'a':[1,2],'c':['l1','l2']}, index=['a'])
181+
df2 = DataFrame.from_records(
182+
{'a':[1.0,2.0],'c':['l1','l2']}, index=['a'])
183+
self._assert_not_equal(df1.c, df2.c, check_index_type=True)
184+
185+
def test_multiindex_dtype(self):
186+
df1 = DataFrame.from_records(
187+
{'a':[1,2],'b':[2.1,1.5],'c':['l1','l2']}, index=['a','b'])
188+
df2 = DataFrame.from_records(
189+
{'a':[1.0,2.0],'b':[2.1,1.5],'c':['l1','l2']}, index=['a','b'])
190+
self._assert_not_equal(df1.c, df2.c, check_index_type=True)
191+
192+
193+
class TestAssertFrameEqual(unittest.TestCase):
194+
_multiprocess_can_split_ = True
195+
196+
def _assert_equal(self, x, y, **kwargs):
197+
assert_frame_equal(x,y,**kwargs)
198+
assert_frame_equal(y,x,**kwargs)
199+
200+
def _assert_not_equal(self, a, b, **kwargs):
201+
self.assertRaises(AssertionError, assert_frame_equal, a, b, **kwargs)
202+
self.assertRaises(AssertionError, assert_frame_equal, b, a, **kwargs)
203+
204+
def test_index_dtype(self):
205+
df1 = DataFrame.from_records(
206+
{'a':[1,2],'c':['l1','l2']}, index=['a'])
207+
df2 = DataFrame.from_records(
208+
{'a':[1.0,2.0],'c':['l1','l2']}, index=['a'])
209+
self._assert_not_equal(df1, df2, check_index_type=True)
210+
211+
def test_multiindex_dtype(self):
212+
df1 = DataFrame.from_records(
213+
{'a':[1,2],'b':[2.1,1.5],'c':['l1','l2']}, index=['a','b'])
214+
df2 = DataFrame.from_records(
215+
{'a':[1.0,2.0],'b':[2.1,1.5],'c':['l1','l2']}, index=['a','b'])
216+
self._assert_not_equal(df1, df2, check_index_type=True)
217+
177218
class TestRNGContext(unittest.TestCase):
178219

179220
def test_RNGContext(self):

pandas/util/testing.py

+12-6
Original file line numberDiff line numberDiff line change
@@ -608,9 +608,12 @@ def assert_series_equal(left, right, check_dtype=True,
608608
else:
609609
assert_index_equal(left.index, right.index)
610610
if check_index_type:
611-
assert_isinstance(left.index, type(right.index))
612-
assert_attr_equal('dtype', left.index, right.index)
613-
assert_attr_equal('inferred_type', left.index, right.index)
611+
for level in range(left.index.nlevels):
612+
lindex = left.index.get_level_values(level)
613+
rindex = right.index.get_level_values(level)
614+
assert_isinstance(lindex, type(rindex))
615+
assert_attr_equal('dtype', lindex, rindex)
616+
assert_attr_equal('inferred_type', lindex, rindex)
614617

615618
# This could be refactored to use the NDFrame.equals method
616619
def assert_frame_equal(left, right, check_dtype=True,
@@ -657,9 +660,12 @@ def assert_frame_equal(left, right, check_dtype=True,
657660
check_exact=check_exact)
658661

659662
if check_index_type:
660-
assert_isinstance(left.index, type(right.index))
661-
assert_attr_equal('dtype', left.index, right.index)
662-
assert_attr_equal('inferred_type', left.index, right.index)
663+
for level in range(left.index.nlevels):
664+
lindex = left.index.get_level_values(level)
665+
rindex = right.index.get_level_values(level)
666+
assert_isinstance(lindex, type(rindex))
667+
assert_attr_equal('dtype', lindex, rindex)
668+
assert_attr_equal('inferred_type', lindex, rindex)
663669
if check_column_type:
664670
assert_isinstance(left.columns, type(right.columns))
665671
assert_attr_equal('dtype', left.columns, right.columns)

0 commit comments

Comments
 (0)