Aquí está mi código:
import pandas as pd
data = pd.DataFrame({'Odd':[1,3,5,6,7,9], 'Even':[0,2,4,6,8,10]})
for i in reversed(data):
print(data['Odd'], data['Even'])
Cuando ejecuto este código, aparece el siguiente error:
Traceback (most recent call last):
File "C:\Python33\lib\site-packages\pandas\core\generic.py", line 665, in _get_item_cache
return cache[item]
KeyError: 5
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\*****\Documents\******\********\****.py", line 5, in <module>
for i in reversed(data):
File "C:\Python33\lib\site-packages\pandas\core\frame.py", line 2003, in __getitem__
return self._get_item_cache(key)
File "C:\Python33\lib\site-packages\pandas\core\generic.py", line 667, in _get_item_cache
values = self._data.get(item)
File "C:\Python33\lib\site-packages\pandas\core\internals.py", line 1656, in get
_, block = self._find_block(item)
File "C:\Python33\lib\site-packages\pandas\core\internals.py", line 1936, in _find_block
self._check_have(item)
File "C:\Python33\lib\site-packages\pandas\core\internals.py", line 1943, in _check_have
raise KeyError('no item named %s' % com.pprint_thing(item))
KeyError: 'no item named 5'
¿Por qué recibo este error?
¿Cómo puedo arreglar eso?
¿Cuál es la forma correcta de revertir pandas.DataFrame?

"One"no es una columnadata, y no sé siTwoes una variable o un error tipográfico"Two", que tampoco es una columna. ¿Está buscando invertir el orden de las columnas?data[["Odd", "Even"]], o más en generaldata[data.columns[::-1]],?reversed(data)que no funciona, pero no sé por qué querría imprimir el conjuntoOddy lasEvencolumnas una vez para cada columna en el marco, que es lo que haría su código si lo usarareversed(list(data)).for i, row in data[::-1].iterrows(): print row["Odd"], row["Even"]. En su pregunta, proporcione siempre ejemplos del resultado que espera; hace la vida mucho más fácil para todos.Respuestas:
o simplemente:
invertirá su marco de datos, si desea tener un
forbucle que vaya de abajo hacia arriba, puede hacer:o
Que está recibiendo un error porque
reversedprimeras llamadasdata.__len__()que devuelve 6. Finalmente se trata de llamardata[j - 1]parajenrange(6, 0, -1), y la primera llamada seríadata[5]; pero en pandas dataframedata[5]significa columna 5, y no hay columna 5, por lo que arrojará una excepción. (ver documentos )fuente
for index, row in df.iloc[::-1].iterrows():data.reindex(index=data.index[::-1], inplace=True)data = data.reindex(index=data.index[::-1])a continuación,data.reset_index(inplace=True, drop=True)y se restablecerá en su lugar.df = df[::-1]una solución pitónica y válida?Puede invertir las filas de una manera aún más simple:
fuente
reverse()método conpd.Series.reverse = pd.DataFrame.reverse = lambda self: self[::-1]porque se ve mejor al encadenar métodos, por ejemplodf.reverse().iterrows().Ninguna de las respuestas existentes restablece el índice después de invertir el marco de datos.
Para ello, haga lo siguiente:
Aquí hay una función de utilidad que también elimina la columna de índice anterior, según el comentario de @ Tim:
Simplemente pase su marco de datos a la función
fuente
drop=True, es decir:, de lodata[::-1].reset_index(drop=True)contrario, el índice anterior se agregará como una columna en el DataFrame.Esto funciona:
fuente