"AttributeError: _ref_locs" while assigning non-contiguous MultiIndex columns · Issue #4686 · pandas-dev/pandas (original) (raw)

Hitting an exception with the following code on 0.12.0 (and current master). Copied 0.11.0 behavior for reference, but feel free to reject if assignment to non-contiguous columns of a MultiIndex using a partial label is illegal/unsupported.

import numpy as np
import pandas as pd

df = pd.DataFrame(
    np.ones((1, 3)),
    columns=pd.MultiIndex.from_tuples(
        [('A', '1'), ('B', '1'), ('A', '2')]
    ),
    dtype=object
)
print 'Before:'
print df.dtypes
df['A'] = df['A'].astype(float)
print 'After:'
print df.dtypes

0.11.0 output:

Before:
A  1    object
B  1    object
A  2    object
dtype: object
After:
A  1    float64
B  1     object
A  2    float64
dtype: object

0.12.0 output:

Before:
A  1    object
B  1    object
A  2    object
dtype: object
Traceback (most recent call last):
  File "repro.py", line 15, in <module>
    df['A'] = df['A'].astype(float)
  File "/home/gmd/ENV/pandas-master/lib/python2.7/site-packages/pandas-0.12.0_270_ge3c71f2-py2.7-linux-i686.egg/pandas/core/frame.py", line 1929, in __setitem__
    self._set_item(key, value)
  File "/home/gmd/ENV/pandas-master/lib/python2.7/site-packages/pandas-0.12.0_270_ge3c71f2-py2.7-linux-i686.egg/pandas/core/frame.py", line 1977, in _set_item
    NDFrame._set_item(self, key, value)
  File "/home/gmd/ENV/pandas-master/lib/python2.7/site-packages/pandas-0.12.0_270_ge3c71f2-py2.7-linux-i686.egg/pandas/core/generic.py", line 798, in _set_item
    self._data.set(key, value)
  File "/home/gmd/ENV/pandas-master/lib/python2.7/site-packages/pandas-0.12.0_270_ge3c71f2-py2.7-linux-i686.egg/pandas/core/internals.py", line 2448, in set
    self._reset_ref_locs()
  File "/home/gmd/ENV/pandas-master/lib/python2.7/site-packages/pandas-0.12.0_270_ge3c71f2-py2.7-linux-i686.egg/pandas/core/internals.py", line 1644, in _reset_ref_locs
    self._rebuild_ref_locs()
  File "/home/gmd/ENV/pandas-master/lib/python2.7/site-packages/pandas-0.12.0_270_ge3c71f2-py2.7-linux-i686.egg/pandas/core/internals.py", line 1652, in _rebuild_ref_locs
    if self._ref_locs is not None:
AttributeError: _ref_locs

Thanks!