Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Python pandas, start row index from 1 instead of zero without creating additional column

I know that I can reset the indices like so

df.reset_index(inplace=True) 

but this will start the index from 0. I want to start it from 1. How do I do that without creating any extra columns and by keeping the index/reset_index functionality and options? I do not want to create a new dataframe, so inplace=True should still apply.

like image 914
Bram Vanroy Avatar asked Aug 27 '15 12:08

Bram Vanroy


People also ask

How do you change the index to start from 1 in Python?

Use DataFrame.reset_index() function We can use DataFrame. reset_index() to reset the index of the updated DataFrame. By default, it adds the current row index as a new column called 'index' in DataFrame, and it will create a new row index as a range of numbers starting at 0.

Do indexing in pandas starts with 0?

Pandas provides a suite of methods in order to get purely integer based indexing. The semantics follow closely python and numpy slicing. These are 0-based indexing.


1 Answers

Just assign directly a new index array:

df.index = np.arange(1, len(df) + 1) 

Example:

In [151]:  df = pd.DataFrame({'a':np.random.randn(5)}) df Out[151]:           a 0  0.443638 1  0.037882 2 -0.210275 3 -0.344092 4  0.997045 In [152]:  df.index = np.arange(1,len(df)+1) df Out[152]:           a 1  0.443638 2  0.037882 3 -0.210275 4 -0.344092 5  0.997045 

Or just:

df.index = df.index + 1 

If the index is already 0 based

TIMINGS

For some reason I can't take timings on reset_index but the following are timings on a 100,000 row df:

In [160]:  %timeit df.index = df.index + 1 The slowest run took 6.45 times longer than the fastest. This could mean that an intermediate result is being cached  10000 loops, best of 3: 107 µs per loop   In [161]:  %timeit df.index = np.arange(1, len(df) + 1) 10000 loops, best of 3: 154 µs per loop 

So without the timing for reset_index I can't say definitively, however it looks like just adding 1 to each index value will be faster if the index is already 0 based

like image 194
EdChum Avatar answered Oct 02 '22 20:10

EdChum