Python实战:Pandas数据筛选的高效方法

大家好,在数据分析过程中,数据筛选是非常重要的一步,尤其是在处理大规模数据时,筛选出符合特定条件的数据有助于专注于需要分析的部分。Pandas作为一个强大的数据处理库,提供了多种数据筛选的方法和工具,能够帮助我们轻松实现多条件的数据筛选。

通过筛选特定的行或列,减少数据集的维度,提升计算效率。筛选有利于聚焦特定条件,有时我们只对满足某些条件的数据感兴趣,筛选可以帮助我们专注于这些数据,同时可以去除不必要的数据噪声,提升分析的准确性。

1.基础数据筛选方法

1.1 单条件筛选

假设有一个包含学生信息的DataFrame,希望筛选出所有年龄大于20岁的学生。

python 复制代码
import pandas as pd

# 创建一个简单的DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],
        '年龄': [19, 22, 18, 21],
        '成绩': [88, 92, 75, 85]}
df = pd.DataFrame(data)

# 筛选出年龄大于20岁的学生
df_filtered = df[df['年龄'] > 20]

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
1  李四  22  92
3  赵六  21  85

在这个例子中,通过df['年龄'] > 20创建了一个布尔索引,用来筛选出所有年龄大于20岁的学生。

1.2 根据多个列进行筛选

有时候需要根据多个条件进行筛选,Pandas允许我们通过布尔运算符实现多条件筛选,常用的逻辑运算符包括&(与)、|(或)和~(非),希望筛选出所有年龄大于20岁且成绩大于85的学生。

python 复制代码
# 筛选出年龄大于20岁且成绩大于85的学生
df_filtered = df[(df['年龄'] > 20) & (df['成绩'] > 85)]

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
1  李四  22  92

通过使用&运算符,实现了多个条件的组合筛选,符合条件的只有"李四"。

2.Pandas中的高级筛选方法

除了基础的布尔筛选,Pandas还提供了许多功能强大的方法,用于处理更复杂的筛选条件。

2.1 使用isin()进行筛选

isin()方法用于筛选特定值的行,它可以检查某列中的值是否在给定的列表中,假设希望筛选出姓名为"张三"或"李四"的学生。

python 复制代码
# 筛选出姓名为张三或李四的学生
df_filtered = df[df['姓名'].isin(['张三', '李四'])]

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
0  张三  19  88
1  李四  22  92

isin()方法可以非常高效地匹配多个值,适用于筛选一列中特定的多个值。

2.2 使用between()进行区间筛选

between()方法用于筛选某个列中的值是否在给定的区间内,它非常适合用于数值型数据的区间筛选。

python 复制代码
# 筛选出年龄在18到21岁之间的学生
df_filtered = df[df['年龄'].between(18, 21)]

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
0  张三  19  88
2  王五  18  75
3  赵六  21  85

在这个示例中,between()方法可以快速筛选出年龄在18到21岁之间的学生。

2.3 使用query()进行筛选

Pandas的query()方法可以使用类SQL的语法对数据进行筛选,适合需要进行复杂逻辑查询的场景。若想要筛选出年龄大于20岁且成绩小于90的学生,可以使用query()方法。

python 复制代码
# 使用query()进行筛选
df_filtered = df.query('年龄 > 20 and 成绩 < 90')

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
3  赵六  21  85

通过query()方法,可以使用类似SQL的语法进行条件组合,简化了复杂条件的书写。

3.筛选包含空值的数据

在实际数据处理中,空值处理也是常见的需求。Pandas提供了isnull()notnull()方法来帮助筛选包含或不包含空值的数据。

python 复制代码
# 创建包含空值的DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],
        '年龄': [19, 22, 18, 21],
        '成绩': [88, None, 75, 85]}
df = pd.DataFrame(data)

# 筛选出成绩为空的学生
df_filtered = df[df['成绩'].isnull()]

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
1  李四  22  NaN

isnull()方法可以帮助快速找到包含空值的行,方便后续的清洗和处理。

4.多列组合条件筛选

在实际应用中,经常需要根据多列的组合条件进行筛选,Pandas可以使用复杂的逻辑条件来实现这些操作。若希望筛选出所有年龄大于18岁且成绩为缺失值的学生,可以通过以下代码实现:

python 复制代码
# 筛选出年龄大于18岁且成绩为空的学生
df_filtered = df[(df['年龄'] > 18) & (df['成绩'].isnull())]

print(df_filtered)

输出结果:

python 复制代码
   姓名  年龄  成绩
1  李四  22  NaN

这种多条件的组合筛选在数据清洗、缺失值处理、异常值排查等场景中非常实用。

5.通过索引进行筛选

除了通过列进行筛选,Pandas还可以通过行或列的索引进行数据筛选。lociloc是常用的通过索引筛选的工具。

python 复制代码
# 使用loc筛选特定的行
df_filtered = df.loc[df['成绩'] > 80, ['姓名', '成绩']]

print(df_filtered)

输出结果:

python 复制代码
   姓名  成绩
0  张三  88
1  李四  92

在这个示例中,使用loc方法根据条件筛选出成绩大于80的学生,同时只保留"姓名"和"成绩"两列。

通过这些方法,可以灵活地从数据集中提取所需的信息,提升数据分析的效率。无论是简单的布尔筛选,还是复杂的多条件组合筛选,Pandas都提供了丰富的工具来满足不同的需求。

相关推荐
卜锦元1 分钟前
Golang后端性能优化手册(第三章:代码层面性能优化)
开发语言·数据结构·后端·算法·性能优化·golang
yenggd12 分钟前
华为批量下发配置命令使用telnetlib模块
网络·python·华为
DARLING Zero two♡22 分钟前
接入 AI Ping 限免接口,让 GLM-4.7 与 MiniMax-M2.1 成为你的免费 C++ 审计专家
开发语言·c++·人工智能
码界奇点24 分钟前
Java外功核心7深入源码拆解Spring Bean作用域生命周期与自动装配
java·开发语言·spring·dba·源代码管理
不惑_25 分钟前
通俗理解感知机(Perceptron)
人工智能·python
Everybody_up28 分钟前
pycharm中编译环境配置
ide·python·pycharm
零小陈上(shouhou6668889)33 分钟前
YOLOv8+PyQt5输电线路缺陷检测(目前最全面的类别检测,可以从图像、视频和摄像头三种路径检测)
python·qt·yolo
luoluoal33 分钟前
基于python的爬虫的贵州菜价可视化系统(源码+文档)
python·mysql·django·毕业设计·源码
老华带你飞36 分钟前
考试管理系统|基于java+ vue考试管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
2501_9216494938 分钟前
股票 API 对接,接入美国纳斯达克交易所(Nasdaq)实现缠论回测
开发语言·后端·python·websocket·金融