web-dev-qa-db-de.com

Richtiger Weg, um pandas.DataFrame umzukehren?

Hier ist mein Code:

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'])

Wenn ich diesen Code ausführe, erhalte ich die folgende Fehlermeldung:

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'

Warum erhalte ich diesen Fehler?
Wie kann ich das beheben?
Was ist der richtige Weg, um pandas.DataFrame Umzukehren?

79
Michael
data.reindex(index=data.index[::-1])

oder einfach:

data.iloc[::-1]

wird Ihren Datenrahmen umkehren. Wenn Sie eine for -Schleife haben möchten, die von unten nach oben geht, können Sie Folgendes tun:

for idx in reversed(data.index):
    print(idx, data.loc[idx, 'Even'], data.loc[idx, 'Odd'])

oder

for idx in reversed(data.index):
    print(idx, data.Even[idx], data.Odd[idx])

Sie erhalten eine Fehlermeldung, weil reversed zuerst data.__len__() aufruft, das 6 zurückgibt. Dann wird versucht, data[j - 1] Für j in range(6, 0, -1) aufzurufen. und der erste Aufruf wäre data[5]; aber in pandas dataframe data[5] bedeutet Spalte 5, und es gibt keine Spalte 5, so dass es eine Ausnahme auslöst. (siehe docs )

168
behzad.nouri

Sie können die Zeilen noch einfacher umkehren:

df[::-1]
49
user1951