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)