Python Pandas:如何根据条件选择DataFrame行
在Pandas中,对数据的选择和操作非常方便和灵活。在处理大量数据时,我们可能需要筛选出符合特定条件的行,这时就可以使用Pandas提供的条件筛选功能。本文将介绍如何使用条件筛选选取DataFrame中的行数据。
在开始之前,我们需要导入Pandas库并创建一个示例DataFrame来进行演示。
import pandas as pd
data = {'name':['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age':[25, 30, 35, 40, 45],
'city':['New York', 'Chicago', 'San Francisco', 'Boston', 'Los Angeles'],
'gender':['Female', 'Male', 'Male', 'Male', 'Female'],
'score1':[90, 80, 70, 60, 50],
'score2':[95, 85, 75, 65, 55]}
df = pd.DataFrame(data)
现在我们有一个包含五个人员信息和两个成绩的数据框(DataFrame)df。我们将使用以下5种方法来选取其中满足条件的行。
1. 使用loc方法
loc方法可以根据行标签来访问DataFrame中的某一行。在配合布尔型的条件筛选语句时,可以选择符合条件的行数据。例如,以下代码会选取年龄列中大于等于35的所有行:
df.loc[df['age'] >= 35]
输出结果为:
name | age | city | gender | score1 | score2 | |
---|---|---|---|---|---|---|
2 | Charlie | 35 | San Francisco | Male | 70 | 75 |
3 | David | 40 | Boston | Male | 60 | 65 |
4 | Emily | 45 | Los Angeles | Female | 50 | 55 |
我们使用df[‘age’] >= 35作为筛选条件,此语句会返回一个布尔型Series,表示DataFrame中age列的每个元素是否大于35。接着使用loc方法取出DataFrame中age列满足条件(即为True)的行。
除了使用一系列布尔型条件作为筛选条件之外,我们还可以使用loc方法来同时筛选行和列。例如,以下代码会选取年龄列大于等于35,分数1列大于等于60的行和前三列数据:
df.loc[df['age'] >= 35, ['name', 'age', 'city']][df['score1'] >= 60]
此代码先筛选出年龄大于等于35的所有行和前三列数据,再在此基础上选取分数1列大于等于60的行。输出结果为:
name | age | city | |
---|---|---|---|
2 | Charlie | 35 | San Francisco |
3 | David | 40 | Boston |
2. 使用iloc方法
iloc方法可以根据行数和列数来访问DataFrame中的某一行或某几行。例如,以下代码选取第2到第4行的所有数据:
df.iloc[1:4, :]
输出结果为:
name | age | city | gender | score1 | score2 | |
---|---|---|---|---|---|---|
1 | Bob | 30 | Chicago | Male | 80 | 85 |
2 | Charlie | 35 | San Francisco | Male | 70 | 75 |
3 | David | 40 | Boston | Male | 60 | 65 |
一个非常有用的技巧是使用iloc方法将所有列的数据选取出来,然后再使用布尔型条件筛选语句来控制选取的行。例如,以下代码会选取分数1列大于等于60的所有行数据:
df.iloc[:, :][df['score1'] >= 60]
此代码先使用iloc方法选取所有行和列数据,再在此基础上选取分数1列大于等于60的行。输出结果和使用loc方法筛选的结果相同。
3. 使用query方法
query方法可以使用一种类似于SQL语句的条件表达式来筛选DataFrame中的数据。例如,以下代码会选取年龄列大于等于35的所有行数据:
df.query('age >= 35')
输出结果和使用loc方法相同。
query方法还可以实现模糊查询,例如,以下代码会选取城市列包含”San”字眼的所有行数据:
df.query('city.str.contains("San")')
输出结果为:
name | age | city | gender | score1 | score2 | |
---|---|---|---|---|---|---|
2 | Charlie | 35 | San Francisco | Male | 70 | 75 |
4. 使用普通的条件筛选语句
普通的条件筛选语句可以使用比较运算符、逻辑运算符等来表达。例如,以下代码会选取分数1列大于等于60,分数2列小于等于75的所有行数据:
df[(df['score1'] >= 60) & (df['score2'] <= 75)]
注意,在使用逻辑运算符时需要使用括号来明确运算顺序。
5. 使用query和普通条件筛选语句的组合
在实际使用过程中,我们可能需要同时使用query和普通条件筛选语句来筛选数据。例如,以下代码会选取城市列包含”San”字眼,并且分数1列大于等于60的所有行数据:
df.query('city.str.contains("San")')[df['score1'] >= 60]
输出结果和loc方法和query方法组合的结果相同。
结论
本文介绍了5种在Pandas中根据条件筛选DataFrame行数据的方法:使用loc方法、使用iloc方法、使用query方法、使用普通的条件筛选语句、使用query和普通条件筛选语句的组合。在实际使用过程中,我们可以根据实际需要进行选择。希望本文对读者能有所帮助。