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)