Yo estaba pasando por la documentación acerca de la jerarquía de la indexación de los Pandas. Traté de probar los ejemplos de ella para crear un vacío dataframe con jerárquica de indexación:

In [5]: df = pd.DataFrame()

In [6]: df.columns = pd.MultiIndex(levels = [['first', 'second'], ['a', 'b']], labels = [[0, 0, 1, 1], [0, 1, 0, 1]])

Sin embargo, se produce un error:

ValueError                                Traceback (most recent call last)
<ipython-input-6-dd823f9b8d22> in <module>()
----> 1 df.columns = pd.MultiIndex(levels = [['first', 'second'], ['a', 'b']], labels = [[0, 0, 1, 1], [0, 1, 0, 1]])
/usr/local/lib/python3.4/dist-packages/pandas/core/generic.py in __setattr__(self, name, value)
2755         try:
2756             object.__getattribute__(self, name)
-> 2757             return object.__setattr__(self, name, value)
2758         except AttributeError:
2759             pass
pandas/src/properties.pyx in pandas.lib.AxisProperty.__set__ (pandas/lib.c:44873)()
/usr/local/lib/python3.4/dist-packages/pandas/core/generic.py in _set_axis(self, axis, labels)
446 
447     def _set_axis(self, axis, labels):
--> 448         self._data.set_axis(axis, labels)
449         self._clear_item_cache()
450 
/usr/local/lib/python3.4/dist-packages/pandas/core/internals.py in set_axis(self, axis, new_labels)
2800             raise ValueError('Length mismatch: Expected axis has %d elements, '
2801                              'new values have %d elements' %
-> 2802                              (old_len, new_len))
2803 
2804         self.axes[axis] = new_labels
ValueError: Length mismatch: Expected axis has 0 elements, new values have 4 elements

No veo ningún problema con mi código. Alguna idea de lo que está sucediendo?

InformationsquelleAutor Peaceful | 2017-04-03

1 Comentario

  1. 10

    El problema es que tiene un vacío de la trama de datos que tiene cero columnas, y usted está tratando de asignar un cuatro columnas multi-índice; Si se crea un vacío de datos de marco de cuatro columnas inicialmente, el error se ha ido:

    df = pd.DataFrame(pd.np.empty((0, 4)))    
    df.columns = pd.MultiIndex(levels = [['first', 'second'], ['a', 'b']], labels = [[0, 0, 1, 1], [0, 1, 0, 1]])

    O puede crear vacíos del marco de datos con el multi-índice de la siguiente manera:

    multi_index = pd.MultiIndex(levels = [['first', 'second'], ['a', 'b']], labels = [[0, 0, 1, 1], [0, 1, 0, 1]])    
    df = pd.DataFrame(columns=multi_index)
    df
    #   first    second
    #  a    b   a     b
    • Gracias! Como un aparte, nunca he visto nada como pd.np.. Usted puede elaborar un poco sobre esto?
    • Eres bienvenido. pd.np es una forma abreviada de import numpy as np; np..., así que usted puede tener acceso a numpy funciones de la pandas.np módulo sin tener que importar numpy módulo de forma explícita.
    • Que hay de nuevo. Gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here