这篇文章将为大家详细讲解有关Python pandas如何根据指定条件筛选数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Python Pandas根据指定条件筛选数据
Python Pandas库提供了一系列强大的功能,用于根据指定条件筛选数据。本文将介绍几种常用的方法:
布尔掩码
通过创建布尔掩码,可以使用 query()
方法根据条件过滤数据。布尔掩码是一个与原始数据框架形状相同的布尔数组,其中 True
值表示满足条件的行,而 False
值表示不满足条件的行。
import pandas as pd
df = pd.DataFrame({
"name": ["John", "Mary", "Bob", "Alice"],
"age": [20, 25, 30, 35]
})
# 筛选年龄大于 30 的行
mask = df["age"] > 30
filtered_df = df[mask]
print(filtered_df)
输出:
name age
2 Bob 30
3 Alice 35
过滤方法
Pandas还提供了专门的过滤方法,例如 filter()
和 isin()
。
filter()
方法使用lambda函数执行行过滤。它返回一个满足条件的新数据框架。
filtered_df = df.filter(lambda row: row["age"] > 30)
isin()
方法用于根据值列表过滤数据。它返回一个布尔掩码,指示原始数据框架中是否存在指定值。
filtered_df = df[df["name"].isin(["Bob", "Alice"])]
多个条件
可以通过使用布尔运算符(如 &
和 |
)将多个条件组合成一个复合条件。
&
(按位与)运算符返回同时满足两个条件的行。
filtered_df = df[(df["age"] > 30) & (df["name"].isin(["Bob", "Alice"]))]
|
(按位或)运算符返回满足任一条件的行。
filtered_df = df[(df["age"] > 30) | (df["name"].isin(["Bob", "Alice"]))]
正则表达式
可以使用正则表达式对字符串列进行模式匹配过滤。
filtered_df = df[df["name"].str.contains("o")]
输出:
name age
0 John 20
2 Bob 30
排除行
可以通过使用 ~
运算符来排除满足条件的行。
filtered_df = df[~(df["age"] > 30)]
输出:
name age
0 John 20
1 Mary 25
自定义函数
可以定义自定义函数来执行复杂的过滤。
def is_over_30(age):
return age > 30
filtered_df = df[df["age"].apply(is_over_30)]
最佳实践
- 优先使用索引过滤而不是布尔掩码,因为它更有效。
- 使用列访问器(如
.loc
和.iloc
)进行基于位置的索引,以提高性能。 - 避免对大型数据框架进行全扫描,而是使用有效的索引和过滤技术。
- 考虑使用多线程或并行处理来加速过滤过程。
以上就是Python pandas如何根据指定条件筛选数据的详细内容,更多请关注编程学习网其它相关文章!