reset_index index python pandas

python - pandas se bloquea en DataFrame.reset_index repetido()



reindex pandas (1)

Muy raro error aquí: estoy usando pandas para fusionar varios marcos de datos. Como parte de la combinación, tengo que llamar a reset_index varias veces. Pero cuando lo hago, se bloquea inesperadamente en el segundo o tercer uso de reset_index.

Aquí hay un código mínimo para reproducir el error:

import pandas A = pandas.DataFrame({ ''val'' : [''aaaaa'', ''acaca'', ''ddddd'', ''zzzzz''], ''extra'' : range(10,14), }) A = A.reset_index() A = A.reset_index() A = A.reset_index()

Aquí está la parte relevante del rastreo:

.... A = A.reset_index() File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 2393, in reset_index new_obj.insert(0, name, _maybe_cast(self.index.values)) File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 1787, in insert self._data.insert(loc, column, value) File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 893, in insert raise Exception(''cannot insert %s, already exists'' % item) Exception: cannot insert level_0, already exists

¿Alguna idea de qué está mal aquí? ¿Cómo trabajo alrededor de esto?


Al inspeccionar frame.py, parece que pandas intenta insertar una columna ''index'' o ''level_0''. Si uno o ambos (??) de ellos ya están tomados, entonces arroja el error.

Afortunadamente, hay una opción de "caída". AFAICT, esto elimina un índice existente con el mismo nombre y lo reemplaza con el nuevo índice de restablecimiento. Esto podría causarle problemas si tiene una columna llamada "índice", pero creo que de lo contrario está bien.

Código "fijo":

import pandas A = pandas.DataFrame({ ''val'' : [''aaaaa'', ''acaca'', ''ddddd'', ''zzzzz''], ''extra'' : range(10,14), }) A = A.reset_index(drop=True) A = A.reset_index(drop=True) A = A.reset_index(drop=True)