Skip to content

Commit 4001816

Browse files
committed
BUG: boolean DataFrame comparison had been broken after internals refactoring
1 parent 8af2745 commit 4001816

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

pandas/core/internals.py

+7
Original file line numberDiff line numberDiff line change
@@ -632,10 +632,13 @@ def form_blocks(data, index, columns):
632632
# put "leftover" columns in float bucket, where else?
633633
# generalize?
634634
num_dict = {}
635+
bool_dict = {}
635636
object_dict = {}
636637
for k, v in data.iteritems():
637638
if issubclass(v.dtype.type, (np.floating, np.integer)):
638639
num_dict[k] = v
640+
elif v.dtype == np.bool_:
641+
bool_dict[k] = v
639642
else:
640643
object_dict[k] = v
641644

@@ -653,6 +656,10 @@ def form_blocks(data, index, columns):
653656
num_block = _simple_blockify(num_dict, columns, num_dtype)
654657
blocks.append(num_block)
655658

659+
if len(bool_dict):
660+
bool_block = _simple_blockify(bool_dict, columns, np.bool_)
661+
blocks.append(bool_block)
662+
656663
if len(object_dict) > 0:
657664
object_block = _simple_blockify(object_dict, columns, np.object_)
658665
blocks.append(object_block)

pandas/tests/test_frame.py

+12
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,13 @@ def test_setitem_boolean(self):
104104
self.assertRaises(Exception, df.__setitem__, df[:-1] > 0, 2)
105105
self.assertRaises(Exception, df.__setitem__, df * 0, 2)
106106

107+
# index with DataFrame
108+
mask = df > np.abs(df)
109+
expected = df.copy()
110+
df[df > np.abs(df)] = np.nan
111+
expected.values[mask.values] = np.nan
112+
assert_frame_equal(df, expected)
113+
107114
def test_setitem_corner(self):
108115
# corner case
109116
df = self.klass({'B' : [1., 2., 3.],
@@ -604,6 +611,11 @@ def test_constructor_mixed(self):
604611

605612
self.assertEqual(self.mixed_frame['foo'].dtype, np.object_)
606613

614+
def test_constructor_bool(self):
615+
df = DataFrame({0 : np.ones(10, dtype=bool),
616+
1 : np.zeros(10, dtype=bool)})
617+
self.assertEqual(df.values.dtype, np.bool_)
618+
607619
def test_is_mixed_type(self):
608620
self.assert_(not self.frame._is_mixed_type)
609621
self.assert_(self.mixed_frame._is_mixed_type)

0 commit comments

Comments
 (0)