2

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

here ranger = range(15)

I get an error while using Forward fill in 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
davidshinn
  • 1,916
  • 1
  • 16
  • 17
Varun
  • 21
  • 1
  • 1
  • 2

4 Answers4

3

As David said it was due to index being a string. But why were you getting the "Index not monotonic Error" and the answer to that is - For reindexing methods to work, your index must be in sorted/monotonic/increasing order. And when your index was a string, it wasn't sorted, correct sorting should have been:

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

Note: ranger being an integer sequence while index is string sequence, the method isn't going to do much but reindex will work

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

Hope this helps and makes reindex clearer !!

Community
  • 1
  • 1
some_user
  • 315
  • 2
  • 14
2

maybe you can try to put the ffill out of reindex l

ser3.reindex(ranger).ffill()
glennsl
  • 28,186
  • 12
  • 57
  • 75
Charles q
  • 19
  • 5
0

There's something about the original index being string and not numeric. If you change the original index to be numeric (e.g., index=[0, 5, 10]), it works correctly.

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
davidshinn
  • 1,916
  • 1
  • 16
  • 17
0

In my case I had to sort_index the dataframe with:

df.sort_index(inplace=True)
Florent
  • 1,791
  • 22
  • 40