Pandas DataFrame:高效筛选满足特定条件行的实用方法

在 Pandas 中,高效访问满足特定条件的行是数据分析中的常见任务。以下是一些方法和技巧,帮助你快速、高效地筛选 DataFrame 中符合条件的行:

图片[1]_Pandas DataFrame:高效筛选满足特定条件行的实用方法_知途无界

1. 使用布尔索引

布尔索引是最常用且高效的方法。通过条件表达式生成布尔 Series,然后直接用于 DataFrame 索引。

import pandas as pd

# 示例数据
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [24, 27, 22, 32],
    'score': [88, 92, 95, 85]
}
df = pd.DataFrame(data)

# 筛选年龄大于25的行
filtered_df = df[df['age'] > 25]
print(filtered_df)

输出

name  age  score
1   Bob   27     92
3 David   32     85

2. 使用 query 方法

query 方法允许你使用类似 SQL 的语法来筛选数据,代码更简洁且可读性更高。

# 使用 query 方法筛选
filtered_df = df.query('age > 25')
print(filtered_df)

优点

  • 代码更简洁。
  • 在处理复杂条件时,query 的语法更直观。

3. 使用 loc 或 iloc(按标签或位置索引)

如果需要同时筛选行和列,可以结合 loc 或 iloc 使用。

# 使用 loc 筛选并选择特定列
filtered_df = df.loc[df['age'] > 25, ['name', 'score']]
print(filtered_df)

输出

name  score
1    Bob     92
3  David     85

4. 多条件筛选

通过逻辑运算符(&|~)组合多个条件。

# 筛选年龄大于25且分数大于85的行
filtered_df = df[(df['age'] > 25) & (df['score'] > 85)]
print(filtered_df)

注意

  • 条件必须用括号括起来。
  • 使用 &(与)、|(或)、~(非),而不是 andornot

5. 使用 isin 方法

isin 方法用于筛选列值在指定集合中的行。

# 筛选名字为 'Alice' 或 'Charlie' 的行
filtered_df = df[df['name'].isin(['Alice', 'Charlie'])]
print(filtered_df)

6. 使用 between 方法

between 方法用于筛选列值在某个范围内的行。

# 筛选年龄在23到30之间的行
filtered_df = df[df['age'].between(23, 30)]
print(filtered_df)

7. 使用 str 访问器(字符串匹配)

对于字符串列,可以使用 str 访问器进行模式匹配。

# 筛选名字以 'A' 开头的行
filtered_df = df[df['name'].str.startswith('A')]
print(filtered_df)

8. 优化性能的建议

  • 避免链式操作:尽量减少多次链式操作,因为每次操作都会创建一个新的 DataFrame。
  • 使用矢量化操作:Pandas 的矢量化操作比逐行处理(如 apply)更快。
  • 索引优化:如果频繁按某列筛选,可以将该列设置为索引,使用 .loc 加速查询。
  • 使用 NumPy:对于简单的数值条件,可以直接使用 NumPy 数组进行计算。
import numpy as np

# 使用 NumPy 加速条件筛选
filtered_df = df[np.array(df['age'] > 25)]
  • 避免重复计算:如果条件复杂,可以先计算布尔索引,再用于筛选。
condition = (df['age'] > 25) & (df['score'] > 85)
filtered_df = df[condition]

9. 示例:综合应用

# 综合示例:筛选年龄大于25且名字以 'D' 开头的行,并只选择名字和分数列
filtered_df = df.loc[(df['age'] > 25) & (df['name'].str.startswith('D')), ['name', 'score']]
print(filtered_df)

输出

name  score
3  David     85

总结

  • 简单条件:使用布尔索引或 query 方法。
  • 复杂条件:结合 &|~ 等逻辑运算符。
  • 字符串操作:使用 str 访问器。
  • 性能优化:尽量使用矢量化操作,避免链式操作和重复计算。

通过合理选择方法,可以高效地筛选 Pandas DataFrame 中满足特定条件的行。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞9 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容