ValueError: индекс должен быть монотонным, увеличиваясь или уменьшаясь

ser3 = Series(['USA','Mexico','Canada'],index = ['0','5','10'])

Вот ranger = range(15)

Я получаю сообщение об ошибке при использовании форвард-заполнения в iPython

ser3.reindex(ranger,method = 'ffill')

/Users/varun/anaconda/lib/python2.7/site-packages/pandas/core/index.pyc in _searchsorted_monotonic(self, label, side)
   2395             return len(self) - pos
   2396 
-> 2397         raise ValueError('index must be monotonic increasing or decreasing')
   2398 
   2399     def get_slice_bound(self, label, side, kind):

ValueError: index must be monotonic increasing or decreasing

4 ответа

Может быть, вы можете попытаться поставить ffill снаружи reindex L

ser3.reindex(ranger).ffill()

Как сказал Дэвид, это связано с тем, что index является строкой. Но почему вы получаете "Индекс не монотонную ошибку", и ответ на этот вопрос таков: чтобы работали методы переиндексации, ваш индекс должен быть в отсортированном / монотонном / возрастающем порядке. И когда ваш индекс был строкой, он не сортировался, правильная сортировка должна была выглядеть так:

ser3 = Серия (['США', 'Мексика', 'Канада'], индекс = ['0','10','5']) ranger = range(15)

Примечание: ranger - целочисленная последовательность, в то время как index - строковая последовательность, метод не собирается делать много, но переиндексирование будет работать

In [100]: ser3.reindex(ranger,method = 'ffill')
Out[100]: 
0     NaN
1     NaN
2     NaN
3     NaN
4     NaN
5     NaN
6     NaN
7     NaN
8     NaN
9     NaN
10    NaN
11    NaN
12    NaN
13    NaN
14    NaN
dtype: object

Надеюсь, что это помогает и делает переиндексацию более ясной!!

В исходном индексе есть что-то строковое, а не числовое. Если вы измените исходный индекс на числовой (например, index=[0, 5, 10]), он будет работать правильно.

In [1]: from pandas import Series
   ...: ser3 = Series(['USA','Mexico','Canada'],index = [0,5,10])
   ...: ranger = range(15)
   ...: ser3.reindex(ranger,method = 'ffill')
   ...: 
Out[1]: 
0        USA
1        USA
2        USA
3        USA
4        USA
5     Mexico
6     Mexico
7     Mexico
8     Mexico
9     Mexico
10    Canada
11    Canada
12    Canada
13    Canada
14    Canada
dtype: object

В моем случае мне пришлось сортировать_индексировать фрейм данных с помощью:

      df.sort_index(inplace=True)
Другие вопросы по тегам