Pandas neu indizieren und fehlende Werte füllen: "Index muss monoton sein"
Bei der Beantwortung vondiese Stapelüberlauf-Frage, Ich habe bei der Verwendung einer Füllmethode beim erneuten Indizieren eines Datenrahmens ein interessantes Verhalten festgestellt.
Diesold Fehlerbericht in Pandas sagt, dassdf.reindex(newIndex,method='ffill')
sollte gleich @ sedf.reindex(newIndex).ffill()
, aber das ist NICHT das Verhalten, das ich beobachte
Hier ist ein Codeausschnitt, der das Verhalten veranschaulicht
df = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-05-04', '2016-06-03']))
newIndex = pd.DatetimeIndex(['2016-05-04', '2016-06-01', '2016-06-02', '2016-06-03', '2016-06-05'])
print(df.reindex(newIndex).ffill())
print(df.reindex(newIndex, method='ffill'))
Die erste print-Anweisung funktioniert wie erwartet. Die Sekunde wirft ein
ValueError: index must be monotonic increasing or decreasing
Was ist denn hier los
EDIT: Beachten Sie, dass die Probedf
absichtlic hat einen nicht monotonen Index. Die Frage bezieht sich auf die Reihenfolge der Operationen indf.reindex(newIndex, method='ffil')
. Ich erwarte, dass der Bug-Report funktioniert - erst mit dem neuen Index neu indizieren und dann ausfüllen.
Wie Sie sehen können, dienewIndex.is_monotonic
istTrue
, und die Füllung funktioniert, wenn sie separat aufgerufen wird, schlägt jedoch fehl, wenn sie als Parameter für @ aufgerufen wirreindex
.