Pandas数据框中选择多列的方法

Pandas数据框中选择多列的方法

技术背景

在数据处理和分析中,经常需要从数据框中选择特定的列。Pandas是Python中用于数据处理和分析的强大库,它提供了多种方法来选择数据框中的列。理解这些方法对于高效处理数据至关重要。

实现步骤

1. 通过列名列表选择

可以通过传递一个列名列表给数据框的索引操作符 [] 来选择多列。

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

data = {
'a': [2, 3],
'b': [3, 4],
'c': [4, 5]
}
df = pd.DataFrame(data)
df1 = df[['a', 'b']]

2. 使用 loc 索引器

loc 索引器可以通过标签(列名)来选择多列。

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

np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])
df1 = df.loc[:, 'C':'E']

3. 使用 iloc 索引器

iloc 索引器可以通过整数位置来选择多列。

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

data = {
'a': [2, 3],
'b': [3, 4],
'c': [4, 5]
}
df = pd.DataFrame(data)
df1 = df.iloc[:, 0:2]

4. 使用 filter 方法

filter 方法可以根据列名来过滤选择多列。

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

data = {
'a': [2, 3],
'b': [3, 4],
'c': [4, 5]
}
df = pd.DataFrame(data)
df1 = df.filter(['a', 'b'])

5. 使用 drop 方法

通过指定要删除的列,可以得到剩余的列。

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

data = {
'a': [2, 3],
'b': [3, 4],
'c': [4, 5]
}
df = pd.DataFrame(data)
colsToDrop = ['a']
df1 = df.drop(colsToDrop, axis=1)

6. 使用 reindex 方法

从Pandas 0.21.0版本开始,推荐使用 reindex 方法来选择列。

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

data = {
'a': [2, 3],
'b': [3, 4],
'c': [4, 5]
}
df = pd.DataFrame(data)
df1 = df.reindex(columns=['b', 'c'])

核心代码

以下是一个完整的示例代码,展示了上述多种方法的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pandas as pd
import numpy as np

# 创建示例数据框
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])

# 方法1:通过列名列表选择
df1 = df[['A', 'B']]

# 方法2:使用loc索引器
df2 = df.loc[:, 'C':'E']

# 方法3:使用iloc索引器
df3 = df.iloc[:, 0:2]

# 方法4:使用filter方法
df4 = df.filter(['A', 'B'])

# 方法5:使用drop方法
colsToDrop = ['A']
df5 = df.drop(colsToDrop, axis=1)

# 方法6:使用reindex方法
df6 = df.reindex(columns=['B', 'C'])

最佳实践

  • 明确需求:根据具体需求选择合适的方法。如果知道列名,优先使用列名列表或 loc 索引器;如果只知道列的位置,使用 iloc 索引器。
  • 避免意外修改:注意选择操作返回的是视图还是副本。如果需要避免修改原始数据框,可使用 .copy() 方法。
  • 性能考虑:对于大规模数据,一些方法可能比其他方法更高效。例如,iloc 索引器在按位置选择列时通常比 loc 索引器更快。

常见问题

1. 切片操作时列名不能按尝试的方式切片

列名(字符串)不能像整数索引那样进行切片。例如,df['a':'b'] 是无效的。可以使用 loc 索引器来实现类似的列名切片操作。

2. 索引器返回视图还是副本

不同的索引方法可能返回视图或副本。修改视图可能会影响原始数据框,而修改副本则不会。如果不确定,可使用 .copy() 方法确保得到副本。

3. 列名缺失问题

在使用列名选择列时,如果列名不存在,可能会引发 KeyError。可以使用 reindex 方法,它会处理缺失的列,返回包含指定列的数据框,缺失的列用 NaN 填充。


Pandas数据框中选择多列的方法
https://119291.xyz/posts/2025-04-18.pandas-dataframe-column-selection/
作者
ww
发布于
2025年4月18日
许可协议