Вот мой код:
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'])
Когда я запускаю этот код, я получаю следующую ошибку:
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'
Почему я получаю эту ошибку?
Как я могу это исправить?
Как правильно повернуть вспять pandas.DataFrame
?
"One"
не является столбцомdata
, и я не знаю,Two
является ли это переменной или опечаткой для"Two"
, которая также не является столбцом. Вы просто хотите изменить порядок столбцов?data[["Odd", "Even"]]
или в более общем смыслеdata[data.columns[::-1]]
?reversed(data)
это не работает, но я не знаю, почему вы хотите распечатать все столбцыOdd
иEven
столбцы один раз для каждого столбца в кадре, что ваш код сделал бы, если бы вы его использовалиreversed(list(data))
.for i, row in data[::-1].iterrows(): print row["Odd"], row["Even"]
. Пожалуйста, всегда приводите в своем вопросе примеры ожидаемого результата; это значительно облегчает жизнь каждому.Ответы:
или просто:
изменит ваш фрейм данных, если вы хотите иметь
for
цикл, который идет снизу вверх, вы можете сделать:или
Вы получаете сообщение об ошибке , потому что
reversed
первые вызовыdata.__len__()
возвращающих 6. Затем он пытается вызватьdata[j - 1]
кj
вrange(6, 0, -1)
, а первый вызов будетdata[5]
; но в pandas dataframedata[5]
означает столбец 5, а столбца 5 нет, поэтому он вызовет исключение. (см. документы )источник
for index, row in df.iloc[::-1].iterrows():
data.reindex(index=data.index[::-1], inplace=True)
data = data.reindex(index=data.index[::-1])
тогдаdata.reset_index(inplace=True, drop=True)
и он будет сброшен на место.df = df[::-1]
вещий и правильное решение?Вы можете перевернуть строки еще проще:
источник
reverse()
метод,pd.Series.reverse = pd.DataFrame.reverse = lambda self: self[::-1]
потому что он выглядит лучше при объединении методов, напримерdf.reverse().iterrows()
.Ни один из существующих ответов не сбрасывает индекс после обращения фрейма данных.
Для этого сделайте следующее:
Вот служебная функция, которая также удаляет старый столбец индекса, согласно комментарию @ Tim:
Просто передайте фрейм данных в функцию
источник
drop=True
, например:,data[::-1].reset_index(drop=True)
иначе старый индекс будет добавлен как столбец в DataFrame.Это работает:
источник