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, wird folgende Fehlermeldung angezeigt:
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 umzukehren pandas.DataFrame
?
"One"
ist keine Spalte indata
und ich weiß nicht, obTwo
es sich um eine Variable oder einen Tippfehler handelt"Two"
, der auch keine Spalte ist. Möchten Sie nur die Spaltenreihenfolge umkehren?data[["Odd", "Even"]]
oder allgemeinerdata[data.columns[::-1]]
?reversed(data)
funktioniert nicht, aber ich weiß nicht, warum Sie das GanzeOdd
und dieEven
Spalten einmal für jede Spalte im Frame drucken möchten, was Ihr Code tun würde, wenn Sie ihn verwenden würdenreversed(list(data))
.for i, row in data[::-1].iterrows(): print row["Odd"], row["Even"]
. Bitte geben Sie in Ihrer Frage immer Beispiele für die erwartete Ausgabe an. es macht das Leben für alle viel einfacher.Antworten:
oder einfach:
wird Ihren Datenrahmen umkehren, wenn Sie eine
for
Schleife haben möchten, die von unten nach oben geht, können Sie Folgendes tun:oder
Sie erhalten einen Fehler , da
reversed
erste Anrufe ,data.__len__()
die 6. Dann kehrt sie zu rufen versucht ,data[j - 1]
fürj
inrange(6, 0, -1)
und der erste Aufruf sein würdedata[5]
; In Pandasdata[5]
bedeutet Datenrahmen jedoch Spalte 5, und es gibt keine Spalte 5, sodass eine Ausnahme ausgelöst wird. (siehe Dokumente )quelle
for index, row in df.iloc[::-1].iterrows():
data.reindex(index=data.index[::-1], inplace=True)
data = data.reindex(index=data.index[::-1])
danndata.reset_index(inplace=True, drop=True)
und es wird an Ort und Stelle zurückgesetzt.df = df[::-1]
eine pythonische und gültige Lösung?Sie können die Zeilen noch einfacher umkehren:
quelle
reverse()
Methode mit,pd.Series.reverse = pd.DataFrame.reverse = lambda self: self[::-1]
weil sie beim Verketten von Methoden besser aussieht, zdf.reverse().iterrows()
.Keine der vorhandenen Antworten setzt den Index nach dem Umkehren des Datenrahmens zurück.
Gehen Sie dazu wie folgt vor:
Hier ist eine Dienstprogrammfunktion , die gemäß @ Tims Kommentar auch die alte Indexspalte entfernt:
Übergeben Sie einfach Ihren Datenrahmen an die Funktion
quelle
drop=True
, dhdata[::-1].reset_index(drop=True)
:, sonst wird der alte Index als Spalte im DataFrame hinzugefügt.Das funktioniert:
quelle