Python中删除Pandas DataFrame的列

Python中删除Pandas DataFrame的列

技术背景

在数据处理和分析过程中,经常需要对Pandas DataFrame进行操作,其中删除列是常见需求。比如在清洗数据时,某些列包含无用信息,或者在特征工程中,需要移除不相关的特征列。

实现步骤

1. 使用del关键字

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

# 创建DataFrame
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

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

2. 使用drop方法

2.1 指定axis=1删除列

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

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

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

2.2 使用columns参数删除列

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

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除列
df = df.drop(columns=['col2', 'col3'])
print(df)

2.3 原地删除列

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

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

# 原地删除列
df.drop('col2', axis=1, inplace=True)
print(df)

3. 根据列索引删除列

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

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除第1列和第3列
df = df.drop(df.columns[[0, 2]], axis=1)
print(df)

4. 使用pop方法

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

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

# 删除列并返回该列
col = df.pop('col2')
print(df)
print(col)

核心代码

以下是几种常见删除列方法的核心代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd

# 创建DataFrame
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

# 使用del关键字
del df['col2']

# 使用drop方法
df = df.drop('col3', axis=1)

# 使用pop方法
col = df.pop('col1')

print(df)

最佳实践

  • 删除单个列:如果只是删除单个列,使用del关键字或drop方法都可以。del关键字更简洁,而drop方法更灵活,可以选择是否原地修改。
  • 删除多个列:使用drop方法并传入列名列表,或者使用列索引列表。
  • 性能考虑:如果需要删除大量列,drop方法通常比del关键字更快。

常见问题

1. 为什么不能使用del df.column_name

del df['column_name']会被Python转换为df.__delitem__('column_name'),而del df.column_name会尝试删除对象的属性。在Pandas DataFrame中,列名虽然可以通过属性访问(如df.column_name),但这只是一种方便的访问方式,并不是真正的属性。因此,del df.column_name不能用于删除列。

2. drop方法的inplace参数有什么作用?

inplace参数用于指定是否原地修改DataFrame。如果inplace=True,则会直接在原DataFrame上进行修改,不会返回新的DataFrame;如果inplace=False(默认值),则会返回一个删除列后的新DataFrame,原DataFrame不变。

3. 如何处理要删除的列不存在的情况?

可以在drop方法中使用errors='ignore'参数,这样如果要删除的列不存在,不会抛出错误,而是忽略该列。

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

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)

# 尝试删除不存在的列,忽略错误
df.drop(['col4'], axis=1, inplace=True, errors='ignore')
print(df)

Python中删除Pandas DataFrame的列
https://119291.xyz/posts/deleting-columns-from-pandas-dataframe/
作者
ww
发布于
2025年4月14日
许可协议