使用 pandas.DataFrame.drop() 我们可以删除或消除给定 DataFrame 中的行。我们可以使用 DataFrame.axis 参数选择要删除的轴。默认情况下,axis=0 意味着删除行。要删除列,应用 axis=1columns 参数。在删除行时,默认情况下,Pandas 会创建 DataFrame 的副本;要从引用的现有 DataFrame 中删除,请使用 inplace=True 选项。

语法:

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

参数:

  • labels: 由字符串或字符串集合引用的行或列标签。
  • axis: 整数或字符串项,分别具有行索引为 0 和列索引为 1。
  • index 或 columns: 单个标签或列表。索引或列可以替换标签,但不能同时使用。
  • level: 当数据框具有多个级别的索引时,用于定义级别。
  • inplace: 如果为 True,则更新原始数据框。
  • errors: 如果列表中的任何项为 False,则忽略错误,并在 errors 设置为 "ignore" 时删除其余值。

返回类型: 更新后的 DataFrame

使用行索引标签删除单个行

Pandas 的一个优势是提供类似于列名的行标签或标题。如果数据框支持行标签(也称为索引标签),我们可以使用行标签名称指定要删除的单个行。

代码

# Python program to delete a single row using row labels  
  
# importing the required library  
import pandas as pd  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, 20, 38, 17],  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
# returning a new DataFrame after dropping the row having index label 'B'  
new_df = df.drop('B')  
   
print("Original DataFrame: \n", df)  
print("New DataFrame: \n", new_df)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
B  Peter   26            20
C  Harry   28            38
D  Naill   25            17
New DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
C  Harry   28            38
D  Naill   25            17

使用索引标签删除多个行

我们可以在列表中给 drop 命令提供多个行索引标签,以从 DataFrame 中删除多个行。

代码

# Python program to delete multiple rows using row labels  
  
# importing the required library  
import pandas as pd  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, 20, 38, 17],  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
# returning a new DataFrame after dropping the row having index labels 'B' and 'C'  
new_df = df.drop(['B', 'C'])  
   
print("Original DataFrame: \n", df)  
print("New DataFrame: \n", new_df)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
B  Peter   26            20
C  Harry   28            38
D  Naill   25            17
New DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
D  Naill   25            17

通过索引号删除行

同样,我们可以通过将索引位置作为 drop() 方法的参数提供来从给定的 Pandas DataFrame 中删除行。由于 drop() 方法不接受行的位置索引作为参数,因此我们必须使用索引并将其传递给 drop() 方法。为了获取要删除的 DataFrame 的行名称,我们必须使用 df.index 函数提取行名称。对于我们打算删除的索引,我们将使用 df.index.values 函数以列表形式返回所有行名称。

例如,使用 df.index[[1,2]],获取第二行和第三行的行标签;然后,drop() 方法删除这些行。请记住,Python 中的列表索引从零开始。

代码

# Python program to delete rows using index number of rows  
  
# importing the required library  
import pandas as pd  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, 20, 38, 17],  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
# returning a new DataFrame after dropping the row having index labels 'B' and 'C' using their index positions  
new_df = df.drop([df.index[1], df.index[2]])  
   
print("Original DataFrame: \n", df)  
print("New DataFrame: \n", new_df)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
B  Peter   26            20
C  Harry   28            38
D  Naill   25            17
New DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
D  Naill   25            17

原地删除 DataFrame 的行

到目前为止,我们一直在获取删除行的新 DataFrame。然而,我们可以在不创建新数据框的情况下删除数据框的行,称为对数据框执行 'in place' 操作。

代码

# Python program to delete rows of a DataFrame in place  
  
# importing the required library  
import pandas as pd  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, 20, 38, 17],  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
print("Original DataFrame: \n", df)  
  
# Updating the existing DataFrame after dropping the row having index labels 'B' and 'C' using their index positions  
df.drop([df.index[1], df.index[2]], inplace = True)  
  
print("Updated DataFrame: \n", df)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
B  Peter   26            20
C  Harry   28            38
D  Naill   25            17
Updated DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
D  Naill   25            17

使用索引范围删除行

通过定义索引范围,我们也可以删除行。下面的示例删除了第三行之前的所有行。

代码

# Python program to delete a range of rows  
  
# importing the required library  
import pandas as pd  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, 20, 38, 17],  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
print("Original DataFrame: \n", df)  
  
# Updating the DataFrame after dropping the row before index 3  
df.drop(df.index[:3], inplace = True)  
  
print("Updated DataFrame: \n", df)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
B  Peter   26            20
C  Harry   28            38
D  Naill   25            17
Updated DataFrame: 
     Name  Age  Salary (LPA)
D  Naill   25            17

根据条件检查删除行

通过 loc[] 和 iloc[] 函数,我们可以根据某些条件(列值)轻松删除 DataFrame 行。

代码

# Python program to delete rows based on a particular condition  
  
# importing the required library  
import pandas as pd  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, 20, 38, 17]  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
print("Original DataFrame: \n", df)  
  
# Deleting rows having people of age lesser than 25  
df1 = df.loc[df['Age'] < 25]  
  
print("New DataFrame: \n", df1)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32
B  Peter   26            20
C  Harry   28            38
D  Naill   25            17
New DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21            32

删除包含 NaN/None 值的行

在处理分析时,我们经常需要清理包含 None、Null 和 np.NaN 值的行。我们可以通过调用 df.dropna() 删除给定 DataFrame 中的 NaN 值。

代码

# Python program to delete rows having NAN values  
  
# importing the required library  
import pandas as pd  
import numpy as np  
   
# Creating a dictionary to store data  
data = {  
    'Name' : ['Itika', 'Peter', 'Harry', 'Naill'],  
    'Age' : [21, 26, 28, 25],  
    'Salary (LPA)' : [32, np.NaN, 38, np.NaN],  
}  
  
# creating a DataFrame for the above data  
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Salary (LPA)'],  
                  index = ['A', 'B', 'C', 'D'])  
  
# Dropping rows having NAN values  
new_df = df.dropna()  
   
print("Original DataFrame: \n", df)  
print("New DataFrame: \n", new_df)  

输出:

Original DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21          32.0
B  Peter   26           NaN
C  Harry   28          38.0
D  Naill   25           NaN
New DataFrame: 
     Name  Age  Salary (LPA)
A  Itika   21          32.0
C  Harry   28          38.0

标签: Pandas, Pandas教程, Pandas库, Pandas基础, Pandas学习, Pandas使用, Pandas指南, Pandas入门教程, Pandas模块, Pandas数据库, Pandas实战教程, Pandas用法总结, Pandas文档