让我们了解一下如何使用各种有用的方法在pandas中选择列。
在从事数据科学项目时,你通常会得到一大堆的数据。但你可能只需要处理数据中的一个子集。这种对必要数据的选择是为了使任务更简单。此外,在使用较小的数据集时,计算速度也会得到提高。有各种方法从数据框架中选择列,包括loc,iloc,filter 等。这篇文章涵盖了所有的方法和例子。
创建一个样本数据集
首先创建一个简单的pandas数据框架,如下图所示。它有6列。
# Import packages
import pandas as pd
# Create a dataframe
df = pd.DataFrame(
data= [['HR', 'Orange', 'Wheat', 30, 165, 4.6],
['DL', 'Purple', 'Flour', 2, 70, 8.3],
['MH', 'Red', 'Mango', 12, 120, 9.0],
['AS', 'Black', 'Apple', 4, 80, 3.3],
['GJ', 'Blue', 'Milk', 32, 180, 1.8],
['KL', 'Green', 'Melon', 33, 172, 9.5],
['PB', 'Magenta', 'Beans', 69, 150, 2.2]],
columns=['State', 'Color', 'Food', 'Average Age', 'Average Height', 'Score']
)
df

1.基本的列选择
在pandas中,从数据框架中选择列的最基本方法之一是将列的列表传递给数据框架对象的索引操作者。
# Selecting columns by passing a list of desired columns
df[['Color', 'Score']]

2.使用列列表选择列
dataframe_name.columns ,返回数据框架中所有列的列表。你可以把它作为访问pandas中多列的方法之一。你需要在数据框架的索引操作符中传递修改后的列列表。这个方法可以通过两种方式进行。
A.传递切分后的列列表
你可以通过索引从dataframe_name.columns 返回的所有列的列表中切出需要的列名。
# slicing df.columns to access the last two columns of the dataframe
df[df.columns[-2:]]

B.使用搜索想要的列isin()
isin() fucntion用来检查一个元素是否存在于列表中。在这里,, the isin() 函数可以用来检查一个列名是否存在于df.columns 列表以及所需列列表中。这有助于从所有列的列表中选择多个列。该函数返回一个布尔数组,其中True 值表示该列名在两个列表中都存在。
# Creating the boolean mask
booleanMask = df.columns.isin(['State', 'Food'])
# saving the selected columns
selectedCols = df.columns[booleanMask]
# selecting the desired columns
df[selectedCols]

3.使用.loc和.iloc来按名称或位置选择列
Pandas.loc 和.iloc 索引器可以与pandas dataframe一起使用,将一个大的数据框架缩小为一个小的数据框架。这些索引器可以用于行和列的选择。
A.使用.loc 索引器
The loc 接收列名或列的列表并返回行或数据框架。索引器同时采取行和列的切分。因此,要从数据框架中只选择列,你可以把行切片留为 ,这将会选择数据框架的所有行。:
对于列切片,你可以传递要选择的列的名称。
# .loc single column selection
df.loc[:, 'Food' ]
0 Wheat
1 Flour
2 Mango
3 Apple
4 Milk
5 Melon
6 Beans
Name: Food, dtype: object
如果你想选择多个列,可以传递一个列的列表。
# .loc multiple column selection
df.loc[:, ['State', 'Food'] ]

B.使用.iloc indexer
The iloc indexer与 indexer相似。 的唯一区别是,它接受列的索引或列的索引列表,并返回一个行或数据帧。.loc iloc
在这里,你也可以把行切片作为: ,以选择所有的行,对于列切片,你可以传递列的索引或要选择的列的索引列表。
# .iloc single column selection
df.iloc[:, 0]
0 HR
1 DL
2 MH
3 AS
4 GJ
5 KL
6 PB
Name: State, dtype: object
# .iloc single column selection
df.iloc[:, [0, 2, 3] ]

4.使用过滤方法来选择包含某些词的列。
你可以使用pandas数据框架的过滤功能来选择列名中包含指定字符串的列。
.filter 函数的参数like 定义了这个特定的字符串。如果一个列名包含指定的字符串,该列将被选中并返回数据框架。
# selecting columns where column name contains 'Average' string
df.filter(like='Average')
5.潘达斯根据数据类型选择列
Pandas数据框架有一个函数select_dtypes ,它有一个include 参数。使用这个参数指定你要选择的列的数据类型。 如果你想从数据框架中只选择特定的数据类型的列,这对你很有用。
# selecting integer valued columns
df.select_dtypes(include=['int64'])

实用提示
- 你也可以基于正则表达式规则来选择列。在过滤器函数中使用
regex参数,以获得列名在给定表达式中评估为True的列。 - 在执行探索性数据分析时,根据数据类型选择列可以证明是有用的。你将有不同的数据类型被隔离,这将消除为不同数据类型手动创建列列表的过程。
如果你想了解更多关于pandas的功能,你可以通过练习。
测试你的知识
Q1: 在pandas数据框架中选择多列的正确方法是什么?
a)df['Col1', 'Col2']
b)df[['Col1', 'Col2']]
c)df[['Col1'], 'Col2']
答案: 只有B选项
Q2: 如何选择所有的分类列(dtype=category )?
答案: 使用pandas数据框架函数select_dtypes() 和include 参数。
dataframe_name.select_dtypes(include=['category'])
Q3: 如何选择列名中含有final 的所有列?
答案: 使用 pandas dataframe 函数filter 和like 参数。
dataframe_name.filter(like='final')