Drop a specific row in Pandas

Question:

I tried drop method of pandas but I didn’t use it. How do I remove a specific row in pandas with Python?

e.g.: My specific row is => Name: Bertug Grade: A Age: 15

Asked By: Bertug

||

Answers:

df = pd.DataFrame([['Jhon',15,'A'],['Anna',19,'B'],['Paul',25,'D']])
df. columns = ['Name','Age','Grade']

df
Out[472]: 
   Name  Age Grade
0  Jhon   15     A
1  Anna   19     B
2  Paul   25     D

You can get the index of your row:

i = df[((df.Name == 'jhon') &( df.Age == 15) & (df.Grade == 'A'))].index

and then drop it:

df.drop(i)
Out[474]: 
   Name  Age Grade
1  Anna   19     B
2  Paul   25     D

As @jezrael pointed our, you can also just negate all three:

df[((df.Name != 'jhon') &( df.Age != 15) & (df.Grade != 'A'))]
Out[477]: 
   Name  Age Grade
1  Anna   19     B
2  Paul   25     D
Answered By: xgrimau

you can just use :

df.drop([a,b,c])

where a,b,c are the list of indexes or row numbers.

to delete only one particular row use

df.drop(i)

where i is the index or the row number.

Answered By: vaibhav krishna

Dropping rows is the inverse operation of filtering rows you want to keep, so a negating a boolean mask that filters for the rows to drop is enough.

df[~(df['Name'].eq('Bertug') & df['Grade'].eq('A') & df['Age'].eq(15))]

which is, by de Morgan’s laws, equivalent to

df[df['Name'].ne('Bertug') | df['Grade'].ne('A') | df['Age'].ne(15))]

Another approach is to simply query the rows you want to keep.

df1 = df.query("not (Name == 'Bertug' and Grade == 'A' and Age == 15)")
# or 
df1 = df.query("Name != 'Bertug' or Grade != 'A' or Age != 15")

If the index of the row(s) to be dropped are given, then query (or drop) can be used too. For example, the following drops the second row.

idx = [1]
df1 = df.query("index != @idx")

# equivalently,
df1 = df.drop(idx)
Answered By: cottontail
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.