306

I need to delete the first three rows of a dataframe in pandas.

I know df.ix[:-1] would remove the last row, but I can't figure out how to remove first n rows.

1
  • For read_csv/read_html you can use e.g. header=3 constructor argument which will set that row as the header row: stackoverflow.com/a/51822697/191246 Commented Dec 16, 2019 at 17:04

10 Answers 10

478

Use iloc:

df = df.iloc[3:]

will give you a new df without the first three rows.

Sign up to request clarification or add additional context in comments.

7 Comments

doesn't that remove the first 4 rows instead the first 3 rows in the original question?
No, It doesn't. The start position of the slice is always included.
Anyone happen to know how to do this in a groupby()? This works but returns duplicate columns in the index df=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
So if you want to delete from row 3 to row 9, for example, how would you do it? df=df.iloc[3:9]?
@M.K if using this approach, you can use this in combination with pd.concat(). Something like, df2 = pd.concat([df.iloc[:3],df.iloc[10:]]).
|
136

I think a more explicit way of doing this is to use drop.

The syntax is:

df.drop(label)

And as pointed out by @tim and @ChaimG, this can be done in-place:

df.drop(label, inplace=True)

One way of implementing this could be:

df.drop(df.index[:3], inplace=True)

And another "in place" use:

df.drop(df.head(3).index, inplace=True)

7 Comments

drop can even be calculated in-place (without extra assignment). Faster and simpler!
To expand on Tim's idea, Example: df.drop(label, inplace=True)
Due to index 0, I believe the implementation suggestion will delete 4 rows.
@DanielMorgan That is not the case as python ranges are half open. As to why that is, is another question. See stackoverflow.com/questions/4504662/… or quora.com/…
@tim, according to this, inplace operations are not faster. Also, simpler is a matter of opinion: I find it easier to read when the code doesn't have inplace parameters.
|
18
df = df.iloc[n:]

n drops the first n rows.

Comments

12

A simple way is to use tail(-n) to remove the first n rows

df=df.tail(-3)

Comments

8
df.drop(df.index[[0,2]])

Pandas uses zero based numbering, so 0 is the first row, 1 is the second row and 2 is the third row.

Comments

7

You can use python slicing, but note it's not in-place.

In [15]: import pandas as pd
In [16]: import numpy as np
In [17]: df = pd.DataFrame(np.random.random((5,2)))
In [18]: df
Out[18]:
          0         1
0  0.294077  0.229471
1  0.949007  0.790340
2  0.039961  0.720277
3  0.401468  0.803777
4  0.539951  0.763267

In [19]: df[3:]
Out[19]:
          0         1
3  0.401468  0.803777
4  0.539951  0.763267

2 Comments

what does not in-place mean in pandas?
They're talking about the inplace parameter that shows up in many methods in pandas.
5

inp0= pd.read_csv("bank_marketing_updated_v1.csv",skiprows=2)

or if you want to do in existing dataframe

simply do following command

Comments

2

A bit late to answer, but I think the simplest way to remove the first 3 rows would just be:

df = df[3:]

Comments

0

Flexible truncation in pandas with truncate

To remove the first N rows

df.truncate(before=N)

To remove the last M rows

df.truncate(after=M)

To remove the first N and last M rows together

df.truncate(before=N, after=M)

To remove the first N columns

df.truncate(before=N, axis=1)

Comments

-1

There is a simple way to implement that by the drop command.

df = df.drop(3)

2 Comments

Hi, Aman. Please wrap code examples in code blocks for clarity (see guidelines). It also helps to reference documentation pages to help the questioner understand the method.
this will fail if your index is not 1, 2, 3, 4, 5, for example.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.