Python Pandas:如何根据条件选择DataFrame行

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和普通条件筛选语句的组合。在实际使用过程中,我们可以根据实际需要进行选择。希望本文对读者能有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程