Skip to content

Commit bc9f380

Browse files
committed
Merge pull request #6730 from jreback/numeric
BUG: bug in BlockManager._get_numeric_data, with invalid combine
2 parents de167f7 + 825cf55 commit bc9f380

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

pandas/core/internals.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1907,7 +1907,7 @@ def fillna(self, value, limit=None, inplace=False, downcast=None):
19071907
values = self.values if inplace else self.values.copy()
19081908
return [self.make_block(values.get_values(value), fill_value=value)]
19091909

1910-
1910+
19111911
def shift(self, periods, axis=0):
19121912
""" shift the block by periods """
19131913
N = len(self.values.T)
@@ -2674,18 +2674,17 @@ def get_data(self, copy=False, columns=None, **kwargs):
26742674
if len(blocks) == 0:
26752675
return self.make_empty()
26762676

2677-
return self.combine(blocks)
2677+
return self.combine(blocks, copy=copy)
26782678

2679-
def combine(self, blocks):
2679+
def combine(self, blocks, copy=True):
26802680
""" return a new manager with the blocks """
26812681
indexer = np.sort(np.concatenate([b.ref_locs for b in blocks]))
26822682
new_items = self.items.take(indexer)
26832683

26842684
new_blocks = []
26852685
for b in blocks:
2686-
b = b.copy(deep=False)
2687-
b.ref_items = new_items
2688-
new_blocks.append(b)
2686+
b = b.reindex_items_from(new_items, copy=copy)
2687+
new_blocks.extend(_valid_blocks(b))
26892688
new_axes = list(self.axes)
26902689
new_axes[0] = new_items
26912690
return self.__class__(new_blocks, new_axes, do_integrity_check=False)

pandas/tests/test_frame.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10424,6 +10424,16 @@ def test_get_numeric_data(self):
1042410424
expected = df.ix[:, []]
1042510425
assert_frame_equal(result, expected)
1042610426

10427+
df = DataFrame.from_dict({'a':[1,2], 'b':['foo','bar'],'c':[np.pi,np.e]})
10428+
result = df._get_numeric_data()
10429+
expected = DataFrame.from_dict({'a':[1,2], 'c':[np.pi,np.e]})
10430+
assert_frame_equal(result, expected)
10431+
10432+
df = result.copy()
10433+
result = df._get_numeric_data()
10434+
expected = df
10435+
assert_frame_equal(result, expected)
10436+
1042710437
def test_bool_describe_in_mixed_frame(self):
1042810438
df = DataFrame({
1042910439
'string_data': ['a', 'b', 'c', 'd', 'e'],
@@ -10937,7 +10947,7 @@ def test_rank2(self):
1093710947
expected = DataFrame([[1.0, 3.0, 2.0], [1, 2, 3]]) / 3.0
1093810948
result = df.rank(1, pct=True)
1093910949
assert_frame_equal(result, expected)
10940-
10950+
1094110951
df = DataFrame([[1, 3, 2], [1, 2, 3]])
1094210952
expected = df.rank(0) / 2.0
1094310953
result = df.rank(0, pct=True)
@@ -10950,7 +10960,7 @@ def test_rank2(self):
1095010960
result = df.rank(1, numeric_only=False)
1095110961
assert_frame_equal(result, expected)
1095210962

10953-
10963+
1095410964
expected = DataFrame([[2.0, 1.5, 1.0], [1, 1.5, 2]])
1095510965
result = df.rank(0, numeric_only=False)
1095610966
assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)