Skip to content

Commit 9e2eee7

Browse files
committed
Merge pull request #4677 from jreback/numeric2
BUG: preserve empty dtype if possible when creating an empty BlockManager
2 parents 48658fb + 7444384 commit 9e2eee7

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

pandas/core/internals.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1582,7 +1582,10 @@ def make_empty(self, axes=None):
15821582
""" return an empty BlockManager with the items axis of len 0 """
15831583
if axes is None:
15841584
axes = [_ensure_index([]) ] + [ _ensure_index(a) for a in self.axes[1:] ]
1585-
return self.__class__(np.array([]), axes)
1585+
1586+
# preserve dtype if possible
1587+
dtype = self.dtype if self.ndim == 1 else object
1588+
return self.__class__(np.array([],dtype=dtype), axes)
15861589

15871590
def __nonzero__(self):
15881591
return True

pandas/tests/test_generic.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,31 @@ def test_rename_mi(self):
129129
index=MultiIndex.from_tuples([("A",x) for x in ["a","B","c"]]))
130130
result = s.rename(str.lower)
131131

132+
def test_get_numeric_data_preserve_dtype(self):
133+
134+
# get the numeric data
135+
o = Series([1,2,3])
136+
result = o._get_numeric_data()
137+
self._compare(result, o)
138+
139+
o = Series([1,'2',3.])
140+
result = o._get_numeric_data()
141+
expected = Series([],dtype=object)
142+
self._compare(result, expected)
143+
144+
o = Series([True,False,True])
145+
result = o._get_numeric_data()
146+
self._compare(result, o)
147+
148+
o = Series([True,False,True])
149+
result = o._get_bool_data()
150+
self._compare(result, o)
151+
152+
o = Series(date_range('20130101',periods=3))
153+
result = o._get_numeric_data()
154+
expected = Series([],dtype='M8[ns]')
155+
self._compare(result, expected)
156+
132157
class TestDataFrame(unittest.TestCase, Generic):
133158
_typ = DataFrame
134159
_comparator = lambda self, x, y: assert_frame_equal(x,y)
@@ -138,6 +163,14 @@ def test_rename_mi(self):
138163
index=MultiIndex.from_tuples([("A",x) for x in ["a","B","c"]]))
139164
result = df.rename(str.lower)
140165

166+
def test_get_numeric_data_preserve_dtype(self):
167+
168+
# get the numeric data
169+
o = DataFrame({'A' : [1,'2',3.] })
170+
result = o._get_numeric_data()
171+
expected = DataFrame(index=[0,1,2],dtype=object)
172+
self._compare(result, expected)
173+
141174
class TestPanel(unittest.TestCase, Generic):
142175
_typ = Panel
143176
_comparator = lambda self, x, y: assert_panel_equal(x,y)

0 commit comments

Comments
 (0)