내 코드는 다음과 같습니다.
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
?
답변
data.reindex(index=data.index[::-1])
또는 간단히 :
data.iloc[::-1]
데이터 프레임을 뒤집을 것입니다. for
루프를 아래에서 위로 이동하려면 다음을 수행하십시오.
for idx in reversed(data.index):
print(idx, data.loc[idx, 'Even'], data.loc[idx, 'Odd'])
또는
for idx in reversed(data.index):
print(idx, data.Even[idx], data.Odd[idx])
때문에 오류를 받고 reversed
첫 번째 전화 data.__len__()
(6)을 반환 그런 다음 전화를 시도 data[j - 1]
를 위해 j
에 range(6, 0, -1)
, 그리고 첫 번째 통화는 것 data[5]
; 하지만 팬더에서 데이터 프레임 data[5]
은 열 5를 의미하고 열 5가 없으므로 예외가 발생합니다. ( 문서 참조 )
답변
더 간단한 방법으로 행을 반전 할 수 있습니다.
df[::-1]
답변
기존 답변 중 어느 것도 데이터 프레임을 뒤집은 후 인덱스를 재설정하지 않습니다.
이를 위해 다음을 수행하십시오.
data[::-1].reset_index()
@Tim의 주석에 따라 이전 인덱스 열도 제거 하는 유틸리티 함수 는 다음과 같습니다 .
def reset_my_index(df):
res = df[::-1].reset_index(drop=True)
return(res)
데이터 프레임을 함수에 전달하기 만하면 됩니다.
답변
이것은 작동합니다 :
for i,r in data[::-1].iterrows():
print(r['Odd'], r['Even'])