如何在Pandas删除行

时间:2020-02-23 14:42:04  来源:igfitidea点击:

在本教程中,我们将看到如何在Pandas 中删除行。
我们可以使用DataFrame.Drop()方法在Pandas的DataFrame中删除行。

dataframe.drop()的语法

DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

其中 labels:删除的索引或者列。 axis:axis=0用于删除行和 axis=1用于删除列。
对于此帖子,我们将使用Axis = 0删除行。
自从 axis=0是默认值,我们可以忽略此属性。 columns:它是标签的替代品,并用来删除列(在0.21版中引入)。 index:它是标签和用来删除指数的替代方案(在版本0.21中引入)。 inplace:如果为false,则不会修改原始数据帧。

Pandas 基于索引的行

我们可以指定索引标签以删除行。

删除单行

这是一个例子:

import pandas as pd
 
dic = {'Name': ['Netherlands','China','Bhutan','Russia'], "Population": [20000,40000,1000,10000]}
Country_df = pd.DataFrame(dic,index = ['One','Two','Three','Four'])
print("-------Original Dataframe-------\n",Country_df)
 
#Drop index Two
Country_df = Country_df.drop(labels='Two')
print("-------Changed Dataframe-------\n",Country_df)

输出:

-------Original Dataframe------
          Name  Population
One     Netherlands       20000
Two     China       40000
Three  Bhutan        1000
Four   Russia       10000
-------Changed Dataframe------
          Name  Population
One     Netherlands       20000
Three  Bhutan        1000
Four   Russia       10000

正如我们所看到的,则具有索引的行 Two从Pandas DataFrame删除了。

删除多行

更改突出显示线以删除三个和四个索引。

#Drop indices Three and Four
Country_df = Country_df.drop(labels=['Three','Four'])

输出:

-------Original Dataframe------
          Name  Population
One     Netherlands       20000
Two     China       40000
Three  Bhutan        1000
Four   Russia       10000
-------Changed Dataframe------
       Name  Population
One  Netherlands       20000
Two  China       40000

如我们所见,具有索引的行 ThreeFour从Pandas DataFrame删除了。
如果我们想要修改原始数据帧,我们可以通过 inplace=True

#Drop indices Three and Four
Country_df.drop(labels=['Three','Four'],inPlace=True)

正如我们所看到的,我们不必重新分配 Country_df现在。

Pandas丢弃条件

我们还可以根据某些条件删除行。

以下是一个示例:假设我们要删除人口小于或者等于10000的所有行。
我们可以通过拨出条件来获取所有这些行的索引并将其传递给Drop()方法。

import pandas as pd
 
dic = {'Name': ['Netherlands','China','Bhutan','Russia'], "Population": [20000,40000,1000,10000]}
Country_df = pd.DataFrame(dic,index = ['One','Two','Three','Four'])
 
print("-------Original Dataframe-------\n",Country_df)
 
#Delete all the rows whose population is less than 10000
Country_df.drop(Country_df[Country_df['Population']<=10000].index,inplace=True)
print("-------Changed Dataframe-------\n",Country_df)

输出:

-------Original Dataframe------
          Name  Population
One     Netherlands       20000
Two     China       40000
Three  Bhutan        1000
Four   Russia       10000
-------Changed Dataframe------
       Name  Population
One  Netherlands       20000
Two  China       40000

Pandas 删除NaN行

你可以丢弃值 NaN行使用 dropna()方法。
这是一个例子:

import numpy as np
import pandas as pd
 
dic = {'Name': ['Netherlands','China','Bhutan','Russia'], "Population": ['NaN',40000,'NaN',10000]}
Country_df = pd.DataFrame(dic,index = ['One','Two','Three','Four'])
Country_df =Country_df.replace('NaN',np.NaN)
print("-------Original Dataframe-------\n",Country_df)
 
 
Country_df = Country_df.dropna()
print("-------Changed Dataframe-------\n",Country_df)

输出:

-------Original Dataframe------
          Name  Population
One     Netherlands         NaN
Two     China     40000.0
Three  Bhutan         NaN
Four   Russia     10000.0
-------Changed Dataframe------
         Name  Population
Two    China     40000.0
Four  Russia     10000.0

如我们所见,包含NaN的行从Pandas DataFrame中删除。

Pandas删除重复行

我们可以使用重复行 DataFrame.drop_duplicates()方法。
这是一个例子:

import pandas as pd
 
dic = {'Name': ['Netherlands','China','Netherlands','Russia'], "Population": [20000,40000,20000,10000]}
 
Country_df = pd.DataFrame(dic,index = ['One','Two','Three','Four'])
 
print("-------Original Dataframe-------\n",Country_df)
Country_df = Country_df.drop_duplicates()
Country_df = Country_df.dropna()
print("-------Changed Dataframe-------\n",Country_df)

输出:

-------Original Dataframe------
          Name  Population
One     Netherlands       20000
Two     China       40000
Three   Netherlands       20000
Four   Russia       10000
-------Changed Dataframe------
         Name  Population
One    Netherlands       20000
Two    China       40000
Four  Russia       10000