Skip to content

DatetimeIndex columns cause reset_index() to throw AttributeError #5818

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
acowlikeobject opened this issue Jan 2, 2014 · 1 comment · Fixed by #5819
Closed

DatetimeIndex columns cause reset_index() to throw AttributeError #5818

acowlikeobject opened this issue Jan 2, 2014 · 1 comment · Fixed by #5819
Labels
Bug Dtype Conversions Unexpected or buggy dtype conversions Reshaping Concat, Merge/Join, Stack/Unstack, Explode
Milestone

Comments

@acowlikeobject
Copy link

It appears that if a dataframe has column headers of type DatetimeIndex, calling reset_index() throws AttributeError: 'str' object has no attribute 'view'. I see this both in v0.12 and the master branch.

If column headers are strings or integers, reset_index() works fine.

I'm guessing it's treating the new column array as type DatetimeIndex whereas it now has a string in the 0th position ('index'). Maybe the reset_index should first cast the columns as object and convert the DatetimeIndex values to strings?

In [48]: df = pd.DataFrame(data=np.random.rand(2, 2), columns=pd.date_range('1/1/2013', '1/2/2013'), index=['A', 'B'])

In [49]: df.reset_index()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-49-6983677cc901> in <module>()
----> 1 df.reset_index()

/home/user/environments/python3/src/pandas/pandas/core/frame.py in reset_index(self, level, drop, inplace, col_level, col_fill)
   2447             else:
   2448                 values = _maybe_cast(self.index.values)
-> 2449             new_obj.insert(0, name, values)
   2450 
   2451         new_obj.index = new_index

/home/user/environments/python3/src/pandas/pandas/core/frame.py in insert(self, loc, column, value, allow_duplicates)
   1940         value = self._sanitize_column(column, value)
   1941         self._data.insert(
-> 1942             loc, column, value, allow_duplicates=allow_duplicates)
   1943 
   1944     def _sanitize_column(self, key, value):

/home/user/environments/python3/src/pandas/pandas/core/internals.py in insert(self, loc, item, value, allow_duplicates)
   2899 
   2900         try:
-> 2901             new_items = self.items.insert(loc, item)
   2902             self.set_items_norename(new_items)
   2903 

/home/user/environments/python3/src/pandas/pandas/tseries/index.py in insert(self, loc, item)
   1539 
   1540         new_index = np.concatenate((self[:loc].asi8,
-> 1541                                     [item.view(np.int64)],
   1542                                     self[loc:].asi8))
   1543         return DatetimeIndex(new_index, freq='infer')

AttributeError: 'str' object has no attribute 'view'

In [50]: df = pd.DataFrame(data=np.random.rand(2, 2), columns=[1, 2], index=['A', 'B'])
In [51]: df.reset_index()
Out[51]: 
  index         1         2
0     A  0.947575  0.370406
1     B  0.664856  0.686524

[2 rows x 3 columns]

In [52]: df = pd.DataFrame(data=np.random.rand(2, 2), columns=['C', 'D'], index=['A', 'B'])

In [53]: df.reset_index()
Out[53]: 
  index         C         D
0     A  0.053455  0.599483
1     B  0.776364  0.680425

[2 rows x 3 columns]
@jtratner
Copy link
Contributor

jtratner commented Jan 2, 2014

easy fix - DatetimeIndex's insert method wasn't handling non-datetimes correctly. I'll have a PR up shortly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Dtype Conversions Unexpected or buggy dtype conversions Reshaping Concat, Merge/Join, Stack/Unstack, Explode
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants