Панды переиндексируют и заполняют пропущенные значения: «Индекс должен быть монотонным»
Отвечаяэтот вопросЯ обнаружил интересное поведение при использовании метода fill при переиндексации данных.
этостарый отчет об ошибке в пандах говорит чтоdf.reindex(newIndex,method='ffill')
должно быть эквивалентноdf.reindex(newIndex).ffill()
но это НЕ поведение, которое я наблюдаю
Вот фрагмент кода, который иллюстрирует поведение
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'))
Первое печатное заявление работает как ожидалось. Вторая поднимает
ValueError: index must be monotonic increasing or decreasing
Что тут происходит?
РЕДАКТИРОВАТЬ: Обратите внимание, что образецdf
намеренно имеет немонотонный индекс. Вопрос относится к порядку операций вdf.reindex(newIndex, method='ffil')
, Я ожидаю, что в отчете об ошибках сказано, что он должен сработать - сначала переиндексировать с новым индексом, а затем заполнить.
Как видите,newIndex.is_monotonic
являетсяTrue
и заливка работает, когда вызывается отдельно, но завершается неудачно, когда вызывается как параметр дляreindex
.