36

I'm not sure where I am astray but I cannot seem to reset the index on a dataframe.

When I run test.head(), I get the output below:

test.head

As you can see, the dataframe is a slice, so the index is out of bounds. What I'd like to do is to reset the index for this dataframe. So I run test.reset_index(drop=True). This outputs the following:

reset

That looks like a new index, but it's not. Running test.head again, the index is still the same. Attempting to use lambda.apply or iterrows() creates problems with the dataframe.

How can I really reset the index?

Gonçalo Peres
  • 11,752
  • 3
  • 54
  • 83
Union find
  • 7,759
  • 13
  • 60
  • 111

4 Answers4

73

reset_index by default does not modify the DataFrame; it returns a new DataFrame with the reset index. If you want to modify the original, use the inplace argument: df.reset_index(drop=True, inplace=True). Alternatively, assign the result of reset_index by doing df = df.reset_index(drop=True).

BrenBarn
  • 242,874
  • 37
  • 412
  • 384
26

BrenBarn's answer works.

The following also worked via this thread, which isn't a troubleshooting so much as an articulation of how to reset the index:

test = test.reset_index(drop=True)
Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Union find
  • 7,759
  • 13
  • 60
  • 111
4

As an extension of in code veritas's answer... instead of doing del at the end:

test = test.reset_index()
del test['index']

You can set drop to True.

test = test.reset_index(drop=True)
Rob
  • 26,989
  • 16
  • 82
  • 98
Wendao Liu
  • 123
  • 5
1

I would add to in code veritas's answer:

If you already have an index column specified, then you can save the del, of course. In my hypothetical example:

    df_total_sales_customers = pd.DataFrame({'Sales': total_sales_customers['Sales'],
                              'Customers': total_sales_customers['Customers']}, index = total_sales_customers.index)

    df_total_sales_customers = df_total_sales_customers.reset_index()
Subspacian
  • 2,017
  • 1
  • 15
  • 6