在 pandas 中删除列

2025年03月17日 | 阅读 9 分钟

在 Pandas 中处理数据时,我们可能会删除 Pandas DataFrame 中的列或某些行。通常会删除不再需要的列/行以便进一步研究。有几种方法可以做到这一点,但在 Pandas 中最好的方法是使用 .drop() 方法。DataFrame 通常可能包含与研究无关的列。应从 DataFrame 中删除此类列,以便我们能够专注于剩余的列。

可以通过定义标签名称和相应轴来删除列,或者直接指定索引或列名称。此外,还可以通过定义级别来删除多级索引上的标签。在本文中,我们将通过一些示例讨论在 pandas 中删除列。

drop() 函数

drop() 函数用于从行或列中删除一组标签。我们可以通过定义标签名称和匹配的轴来排除行或列,或者直接定义索引或列名称。通过定义级别,可以删除多级索引上的标签。我们可以使用 .drop() 函数从 Python DataFrame 中删除一个或多个列。

语法

drop() 函数的语法可以定义为:

参数

Labels: 列名或行索引值的字符串或列表。

Index: 提供行标签。

Level: 在 MultiIndex DataFrame 的情况下,用于确定从哪个级别删除标签。它接受级别位置或级别名称作为输入。

Axis: 指示删除列或行。要删除列,请将轴设置为 1'columns'。默认情况下,它会从 DataFrame 中删除行。

Columns: 这是 axis = 'columns' 的替代选项。作为输入,它接受单个列标签或列标签列表。

Inplace: 指定是返回一个新的 DataFrame 还是修改现有的 DataFrame。它是一个布尔标志,默认值为 False。

Errors: 如果设置为 'ignore',则忽略错误。

返回值

  • 如果 inplace = True,它将返回带有删除列的 DataFrame 或 None。
  • 如果找不到标签,它将引发 KeyError。

删除单列

DataFrame 可能需要删除单个或复杂列。

示例: 在下面的示例中,我们使用 df.drop(columns = 'col name') 来从 DataFrame 中删除 'age' 列。

输出:执行此代码后,我们将获得如下所示的输出

name  age  marks
0  Joe   20   85.1
1  Nat   21   77.8
name  marks
0  Joe   85.1
1  Nat   77.8

使用 axis = 'column' 或 axis = 1 的 drop 函数

要删除列,请使用 DataFrame.drop() 方法的 axis 参数。行或列都可以用作轴。列轴由数字 1'columns' 表示。设置 axis=1axis= 'columns' 并提供要删除的列名列表。

示例: 让我们来看上面的例子,了解如何使用 axis = 'column'axis = 1 的 drop 函数。

输出:执行此代码后,我们将获得如下所示的输出

name  age  marks
0  Joe   20   85.1
1  Nat   21   77.8
name
0  Joe
1  Nat

删除多列

DataFrame.drop() 函数有两个参数,我们可以使用它们一次删除 DataFrame 的多列。

  1. 使用 column 参数指定要删除的列名列表。
  2. 将 axis 设置为 1 并传递列名列表。

示例: 让我们来看一个例子,了解如何删除 DataFrame 中的多列。

输出:执行此代码后,我们将获得如下所示的输出

name  age  marks
0  John   24   77.29
1  Alex   18   69.15
name
0  John
1  Alex

就地删除列

在之前的示例中,每当我们执行删除操作时,pandas 都会生成 DataFrame 的新副本,因为修改不是就地进行的。inplace 参数指定是从现有 DataFrame 中删除列还是制作副本。

  1. 如果 inplace=True,它将更新当前 DataFrame 而不返回任何内容。
  2. 如果 inplace 参数设置为 False,它将生成一个带有更新更改的新 DataFrame 并返回它。

示例: 让我们解释一下如何使用 drop 函数就地删除列。

输出: 执行上述代码后,我们将得到如下输出

name  age  marks
0  John   24   79.18
1  Alex   18   68.79
name
0  John
1  Alex

通过抑制错误删除列

如果我们尝试删除的列不存在于数据集中,DataFrame.drop() 方法将引发 KeyError。如果我们只想在列存在时删除它,我们可以使用 errors 参数来消除错误。

  1. 设置 errors= 'ignore' 以防止引发任何错误。
  2. 设置 errors= 'raised' 以生成未知列的 KeyError。

示例: 让我们看一个例子,了解如何通过抑制错误来删除列。

输出: 执行上述代码后,我们将得到如下输出

name  age  marks
0  John   24  79.49
1  Alex   18  82.54
raise KeyError(f"{labels[mask]} not found in axis")
KeyError: "['salary'] not found in axis"

按索引位置删除列

如果我们想从 DataFrame 中删除列但不知道它们的名称,我们可以通过使用其索引位置删除列来做到这一点。列索引从 0 开始,一直到最后一列,其索引值为 len(df.columns)-1

删除前 n 列

如果我们想从 DataFrame 中删除前 'n' 列,我们可以使用 DataFrame.iloc 和 Python 的 range() 函数来定义要删除的列的范围。使用 DataFrame.drop() 的 columns 参数,我们需要使用内置函数 range()

示例: 让我们看一个例子,了解如何删除 DataFrame 中的前 n 列。

输出:执行此代码后,我们将获得如下所示的输出

name  age  marks  class  city
0  John   24  84.45   A     US
1  Alex   18  76.11    B     UK
marks  class  city
84.45   A     US
76.11    B     UK

删除最后一列

假设我们想在不使用列名的情况下删除 DataFrame 的第一列或最后一列。在这种情况下,可以使用 DataFrame.columns 属性按索引位置删除 DataFrame 列。只需将 df.columns[index] 传递给 DataFrame.drop 的 columns 参数 ()

示例: 让我们看一个例子,了解如何从 DataFrame 中删除最后一列。

输出: 执行上述代码后,我们将得到如下输出

name  age  marks
0  John   24  68.44
1  Alex   18  85.67
name  age
0  John   24
1  Alex   18

使用 iloc 删除列范围

我们可能需要从数据集中排除第四列或一组列。可以使用 DataFrame.iloc 从 DataFrame 中选择一个或多个列。为了定义需要删除的列的索引位置,我们可以在 columns 参数中使用 DataFrame.iloc

示例: 让我们来看一个例子,了解如何使用 iloc 函数删除列范围。

输出: 执行上述代码后,我们将得到如下输出

name  age  marks
0  John   24  79.64
1  Alex   18  86.84
name  
0  John  
1  Alex  

从多级索引 DataFrame 中删除列

具有多个列头的 DataFrame 称为多级索引 DataFrame。此类头分为多个级别,级别 0 是第一个,级别 1 是第二个,依此类推。可以从多级索引 DataFrame 的任何级别删除列。默认情况下,它会从所有级别删除列,但我们可以使用 level 参数仅从一个级别删除列。我们需要将级别名称作为 level=level index 传递。

示例: 让我们看一个例子,了解如何从多级索引 DataFrame 中删除列。

输出: 执行上述代码后,我们将得到如下输出

Class X Class Y Class Z Class Y
     Name   Marks    Name   Marks
0    John   87.22     Nat   68.79
1   Peter   73.45    Alex   82.76
Class X Class Z
     Name    Name
0    John     Nat
1   Peter    Alex

使用函数删除列

我们还可以使用该函数根据某些逻辑或条件删除列。我们可以使用内置函数和用户定义的函数来删除列。

使用 pandas DataFrame.pop() 函数删除列

如果我们只想删除一列,我们可以使用 DataFrame.pop(col label) 函数。我们需要传递需要删除的列标签。通过更新现有 DataFrame,它会就地删除该列。如果找不到该列,它将引发 KeyError。

示例: 让我们看一个例子,了解如何使用 pandas DataFrame.pop() 函数删除列。

输出:执行此代码后,我们将获得如下所示的输出

name  age  marks
0  John   24  62.46
1  Alex   18  54.21
name  marks
0  John  62.46
1  Alex  54.21

使用 loc 函数删除列

如果我们想删除 DataFrame 中的所有列,我们可以使用 DataFrame.locDataFrame.drop() 的 columns 参数中快速轻松地做到这一点。使用 DataFrame.loc 定义需要删除的列标签。如果未定义列标签,例如 df.loc[:],则将删除 DataFrame 中的所有列。

示例: 让我们来看一个例子,了解如何使用 loc 函数删除列。

输出: 执行上述代码后,我们将得到如下输出

name  age  marks
0  John   24  79.68
1  Alex   18  84.45

使用 pandas DataFrame delete 删除列

要从 DataFrame 中删除单个列,我们可以使用 pandas 内置函数 del。这是从 DataFrame 中删除列的一种非常简化的方法。我们必须选择要删除的 DataFrame 列,并将其作为 del df[col label] 传递。

示例: 让我们来看一个例子,了解如何使用 pandas DataFrame delete 删除列。

输出:执行此代码后,我们将获得如下所示的输出

name  age  marks
0  John   23  57.88
1  Alex   22  78.84
name  marks
0  John  57.88
1  Alex  78.84