从Pandas DataFrame中删除列的方法

从Pandas DataFrame中删除列的方法

技术背景

在数据处理和分析中,经常需要对Pandas DataFrame进行操作,其中删除列是一个常见需求。Pandas提供了多种方法来实现这一操作,每种方法都有其特点和适用场景。

实现步骤

使用drop方法

drop方法是删除列的常用方法,它可以通过指定列名或列索引来删除列。

删除单个列

1
df = df.drop('column_name', axis=1)

其中,1表示按列操作(0表示按行操作)。

删除多个列

1
df = df.drop(['column_nameA', 'column_nameB'], axis=1)

从Pandas 0.21.0版本开始,drop()方法也可以接受columns关键字作为指定轴的替代方法:

1
df = df.drop(columns=['column_nameA', 'column_nameB'])

如果不想重新赋值df,可以使用inplace=True参数:

1
df.drop('column_name', axis=1, inplace=True)

按列编号删除

要按列编号而不是列标签删除列,可以使用以下方法,例如删除第1、2和4列:

1
df = df.drop(df.columns[[0, 1, 3]], axis=1)

使用del关键字

1
del df['column_name']

不过,del df.column_name由于Python的语法限制很难正常工作。

使用pop方法

1
df.pop('column-name')

该方法会删除指定列并返回该列的数据。

仅删除存在的列

从Pandas 0.16.1版本开始,可以使用errors='ignore'参数来仅删除存在的列:

1
df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')

核心代码

删除单个列

1
2
3
4
5
6
7
8
9
import pandas as pd

# 创建示例DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除列'B'
df = df.drop('B', axis=1)
print(df)

删除多个列

1
2
3
4
5
6
7
8
9
import pandas as pd

# 创建示例DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除列'A'和'C'
df = df.drop(['A', 'C'], axis=1)
print(df)

使用del关键字

1
2
3
4
5
6
7
8
9
import pandas as pd

# 创建示例DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除列'B'
del df['B']
print(df)

使用pop方法

1
2
3
4
5
6
7
8
9
10
import pandas as pd

# 创建示例DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除列'B'
column_b = df.pop('B')
print(df)
print(column_b)

最佳实践

  • 当需要同时删除多个列时,使用drop方法并传入列名列表是一个不错的选择。
  • 如果要确保只删除存在的列,使用drop方法并设置errors='ignore'参数。
  • 当需要删除列并获取该列的数据时,使用pop方法。

常见问题

为什么不能使用del df.column_name

del df['column']映射到Python的魔术方法df.__delitem__('column'),该方法在Pandas中用于删除列。而del df.column_name理论上可以通过实现__delattr__魔术方法来工作,但这会引入一些问题。例如,如果DataFrame中有一个名为dtypescolumns的列,del df.dtypes会使__delattr__方法混淆,不清楚是要删除dtypes属性还是dtypes列。

如何处理DataFrame列名包含特殊字符的情况?

当列名包含特殊字符时,建议使用del df['column_name']df.drop('column_name', axis=1)的方式,避免使用df.column_name的点语法,因为点语法不支持特殊字符。


从Pandas DataFrame中删除列的方法
https://119291.xyz/posts/2025-05-16.deleting-columns-from-pandas-dataframe/
作者
ww
发布于
2025年5月16日
许可协议