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:索引必须单调递增或递减的主要内容,如果未能解决你的问题,请参考以下文章