Skip to content

Commit 922d041

Browse files
committed
BUG: also try to cast non-MultiIndex to better dtype when calling reset_index #726 #440
1 parent 4f793be commit 922d041

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

RELEASE.rst

+2
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,8 @@ pandas 0.7.0
257257
non-integer index (GH #707)
258258
- Use right dropna function for SparseSeries. Return dense Series for NA fill
259259
value (GH #730)
260+
- Fix Index.format bug causing incorrectly string-formatted Series with
261+
datetime indexes (# 758)
260262

261263
Thanks
262264
------

pandas/core/frame.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -1896,6 +1896,12 @@ def reset_index(self, drop=False):
18961896
resetted : DataFrame
18971897
"""
18981898
new_obj = self.copy()
1899+
1900+
def _maybe_cast(values):
1901+
if values.dtype == np.object_:
1902+
values = lib.maybe_convert_objects(values)
1903+
return values
1904+
18991905
if not drop:
19001906
if isinstance(self.index, MultiIndex):
19011907
names = self.index.names
@@ -1906,16 +1912,13 @@ def reset_index(self, drop=False):
19061912
col_name = 'level_%d' % i
19071913

19081914
# to ndarray and maybe infer different dtype
1909-
level_values = lev.values
1910-
if level_values.dtype == np.object_:
1911-
level_values = lib.maybe_convert_objects(level_values)
1912-
1915+
level_values = _maybe_cast(lev.values)
19131916
new_obj.insert(0, col_name, level_values.take(lab))
19141917
else:
19151918
name = self.index.name
19161919
if name is None:
19171920
name = 'index' if 'index' not in self else 'level_0'
1918-
new_obj.insert(0, name, self.index.values)
1921+
new_obj.insert(0, name, _maybe_cast(self.index.values))
19191922
new_obj.index = np.arange(len(new_obj))
19201923
return new_obj
19211924

pandas/tests/test_frame.py

+13
Original file line numberDiff line numberDiff line change
@@ -4151,6 +4151,19 @@ def test_reset_index(self):
41514151
resetted = self.frame.reset_index()
41524152
self.assertEqual(resetted.columns.name, 'columns')
41534153

4154+
def test_reset_index_right_dtype(self):
4155+
time = np.arange(0.0, 10, np.sqrt(2)/2)
4156+
s1 = Series((9.81 * time ** 2) /2,
4157+
index=Index(time, name='time'),
4158+
name='speed')
4159+
df = DataFrame(s1)
4160+
4161+
resetted = s1.reset_index()
4162+
self.assert_(resetted['time'].dtype == np.float64)
4163+
4164+
resetted = df.reset_index()
4165+
self.assert_(resetted['time'].dtype == np.float64)
4166+
41544167
#----------------------------------------------------------------------
41554168
# Tests to cope with refactored internals
41564169

0 commit comments

Comments
 (0)