diff --git a/pandas/core/internals.py b/pandas/core/internals.py index fde9421e4a3f9..4344b2542ffd6 100644 --- a/pandas/core/internals.py +++ b/pandas/core/internals.py @@ -1582,7 +1582,10 @@ def make_empty(self, axes=None): """ return an empty BlockManager with the items axis of len 0 """ if axes is None: axes = [_ensure_index([]) ] + [ _ensure_index(a) for a in self.axes[1:] ] - return self.__class__(np.array([]), axes) + + # preserve dtype if possible + dtype = self.dtype if self.ndim == 1 else object + return self.__class__(np.array([],dtype=dtype), axes) def __nonzero__(self): return True diff --git a/pandas/tests/test_generic.py b/pandas/tests/test_generic.py index be27bab46dc47..f388c5d72627c 100644 --- a/pandas/tests/test_generic.py +++ b/pandas/tests/test_generic.py @@ -129,6 +129,31 @@ def test_rename_mi(self): index=MultiIndex.from_tuples([("A",x) for x in ["a","B","c"]])) result = s.rename(str.lower) + def test_get_numeric_data_preserve_dtype(self): + + # get the numeric data + o = Series([1,2,3]) + result = o._get_numeric_data() + self._compare(result, o) + + o = Series([1,'2',3.]) + result = o._get_numeric_data() + expected = Series([],dtype=object) + self._compare(result, expected) + + o = Series([True,False,True]) + result = o._get_numeric_data() + self._compare(result, o) + + o = Series([True,False,True]) + result = o._get_bool_data() + self._compare(result, o) + + o = Series(date_range('20130101',periods=3)) + result = o._get_numeric_data() + expected = Series([],dtype='M8[ns]') + self._compare(result, expected) + class TestDataFrame(unittest.TestCase, Generic): _typ = DataFrame _comparator = lambda self, x, y: assert_frame_equal(x,y) @@ -138,6 +163,14 @@ def test_rename_mi(self): index=MultiIndex.from_tuples([("A",x) for x in ["a","B","c"]])) result = df.rename(str.lower) + def test_get_numeric_data_preserve_dtype(self): + + # get the numeric data + o = DataFrame({'A' : [1,'2',3.] }) + result = o._get_numeric_data() + expected = DataFrame(index=[0,1,2],dtype=object) + self._compare(result, expected) + class TestPanel(unittest.TestCase, Generic): _typ = Panel _comparator = lambda self, x, y: assert_panel_equal(x,y)