ValueError:索引必须单调递增或递减

Posted

技术标签:

【中文标题】ValueError:索引必须单调递增或递减【英文标题】:ValueError: index must be monotonic increasing or decreasing 【发布时间】:2015-09-25 22:34:59 【问题描述】:

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

【问题讨论】:

【参考方案1】:

原来的索引是字符串而不是数字。如果您将原始索引更改为数字(例如 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

【讨论】:

感谢您的帮助。【参考方案2】:

正如大卫所说,这是因为索引是一个字符串。但是为什么你得到“索引不是单调的错误”,答案是 - 为了使重新索引方法起作用,你的索引必须是排序/单调/递增的顺序。当你的索引是一个字符串时,它没有被排序,正确的排序应该是:

ser3 = Series(['USA','Mexico','Canada'],index = ['0','10','5']) 护林员 = 范围(15)

注意:ranger 是一个整数序列,而 index 是字符串序列,该方法不会做太多,但 reindex 会起作用

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

希望这会有所帮助并使重新索引更清晰!

【讨论】:

【参考方案3】:

也许您可以尝试将ffill 放在reindex 之外

ser3.reindex(ranger).ffill()

【讨论】:

以上是关于ValueError:索引必须单调递增或递减的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:索引必须是单调的

单调栈与单调队列

1745. 单调数列

单调数列

单调栈算法 入门+博客推荐+模板

896. 单调数列