首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python Pandas筛选数据的30种方法,效率翻倍

Python Pandas筛选数据的30种方法,效率翻倍

作者头像
用户11081884
发布2026-07-20 19:01:17
发布2026-07-20 19:01:17
260
举报

Pandas作为Python数据分析的核心库,其数据筛选功能直接影响着数据处理效率。本文将介绍30种实用的数据筛选方法,涵盖基础查询到高级操作,每种方法都有代码示例。

基础条件筛选

1. 直接布尔索引

代码语言:javascript
复制
# 筛选年龄大于30的记录
df[df['age'] > 30]

2. 多条件组合

代码语言:javascript
复制
# 筛选年龄大于30且工资低于50000的记录
df[(df['age'] > 30) & (df['salary'] < 50000)]

3. 使用query方法

代码语言:javascript
复制
# 使用字符串表达式筛选
df.query("age > 25 and department == 'Sales'")

字符串操作筛选

4. 字符串包含筛选

代码语言:javascript
复制
# 筛选姓名包含"John"的记录
df[df['name'].str.contains('John', na=False)]

5. 字符串开头/结尾匹配

代码语言:javascript
复制
# 筛选邮箱以"gmail.com"结尾的记录
df[df['email'].str.endswith('gmail.com')]

6. 正则表达式匹配

代码语言:javascript
复制
# 筛选符合电话号码格式的记录
df[df['phone'].str.match(r'^\d{3}-\d{3}-\d{4}$')]

数值范围筛选

7. between范围筛选

代码语言:javascript
复制
# 筛选年龄在25到35之间的记录
df[df['age'].between(25, 35)]

8. 分位数筛选

代码语言:javascript
复制
# 筛选工资在前20%的记录
df[df['salary'] > df['salary'].quantile(0.8)]

9. 绝对值的筛选

代码语言:javascript
复制
# 筛选温度变化绝对值大于5的记录
df[df['temperature_change'].abs() > 5]

多值匹配筛选

10. isin多值匹配

代码语言:javascript
复制
# 筛选部门为销售或市场的记录
df[df['department'].isin(['Sales', 'Marketing'])]

11. 排除特定值

代码语言:javascript
复制
# 筛选部门不是HR或IT的记录
df[~df['department'].isin(['HR', 'IT'])]

时间数据筛选

12. 日期范围筛选

代码语言:javascript
复制
# 筛选2024年的记录
df[df['date'].between('2024-01-01', '2024-12-31')]

13. 按月份筛选

代码语言:javascript
复制
# 筛选3月份的记录
df[df['date'].dt.month == 3]

14. 按星期筛选

代码语言:javascript
复制
# 筛选周末的记录
df[df['date'].dt.dayofweek.isin([5, 6])]

缺失值处理筛选

15. 筛选非空值

代码语言:javascript
复制
# 筛选邮箱不为空的记录
df[df['email'].notna()]

16. 筛选特定列缺失值

代码语言:javascript
复制
# 筛选电话号码为空的记录
df[df['phone'].isna()]

数据类型筛选

17. 按数据类型筛选

代码语言:javascript
复制
# 筛选数值型列
numeric_cols = df.select_dtypes(include=['number'])

18. 排除特定数据类型

代码语言:javascript
复制
# 排除对象类型列
non_object_cols = df.select_dtypes(exclude=['object'])

索引操作筛选

19. loc基于标签筛选

代码语言:javascript
复制
# 筛选特定行和列
df.loc[df['score'] > 90, ['name', 'score']]

20. iloc基于位置筛选

代码语言:javascript
复制
# 筛选前100行的第2,4,6列
df.iloc[:100, [1, 3, 5]]

分组筛选

21. 分组后筛选

代码语言:javascript
复制
# 筛选每个部门工资前3的员工
df.groupby('department').apply(lambda x: x.nlargest(3, 'salary'))

22. 分组大小筛选

代码语言:javascript
复制
# 筛选成员数超过10的部门
df.groupby('department').filter(lambda x: len(x) > 10)

排序相关筛选

23. 最大/最小值筛选

代码语言:javascript
复制
# 筛选工资最高的5条记录
df.nlargest(5, 'salary')

24. 头部/尾部记录

代码语言:javascript
复制
# 筛选最早入职的10名员工
df.sort_values('hire_date').head(10)

随机抽样筛选

25. 固定数量抽样

代码语言:javascript
复制
# 随机抽取50条记录
df.sample(n=50, random_state=42)

26. 比例抽样

代码语言:javascript
复制
# 随机抽取10%的记录
df.sample(frac=0.1, random_state=42)

重复值处理

27. 查找重复记录

代码语言:javascript
复制
# 筛选姓名和邮箱重复的记录
df[df.duplicated(subset=['name', 'email'], keep=False)]

28. 保留首次出现记录

代码语言:javascript
复制
# 去除重复记录,保留第一次出现
df.drop_duplicates(subset=['name', 'email'], keep='first')

自定义函数筛选

29. apply自定义筛选

代码语言:javascript
复制
# 使用自定义函数筛选复杂条件
df[df.apply(lambda row: len(row['name']) > 5 and row['age'] < 40, axis=1)]

30. 使用eval高效筛选

代码语言:javascript
复制
# 对于大型数据集使用eval提升性能
df[df.eval('age > 30 and salary > 50000')]

性能优化技巧

使用query代替布尔索引:对于大型数据集,query方法通常更高效。

避免链式操作:尽量使用单一操作代替多个链式操作。

使用适当的数据类型:将字符串转换为分类类型可以提升筛选速度。

利用索引:对经常筛选的列建立索引。

掌握这30种筛选方法,让你的数据分析效率提升数倍。

  • 快速处理各种数据筛选需求;
  • 提高代码的可读性和维护性;
  • 显著提升数据处理效率;
  • 应对复杂的数据分析场景;

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础条件筛选
    • 1. 直接布尔索引
    • 2. 多条件组合
    • 3. 使用query方法
  • 字符串操作筛选
    • 4. 字符串包含筛选
    • 5. 字符串开头/结尾匹配
    • 6. 正则表达式匹配
  • 数值范围筛选
    • 7. between范围筛选
    • 8. 分位数筛选
    • 9. 绝对值的筛选
  • 多值匹配筛选
    • 10. isin多值匹配
    • 11. 排除特定值
  • 时间数据筛选
    • 12. 日期范围筛选
    • 13. 按月份筛选
    • 14. 按星期筛选
  • 缺失值处理筛选
    • 15. 筛选非空值
    • 16. 筛选特定列缺失值
  • 数据类型筛选
    • 17. 按数据类型筛选
    • 18. 排除特定数据类型
  • 索引操作筛选
    • 19. loc基于标签筛选
    • 20. iloc基于位置筛选
  • 分组筛选
    • 21. 分组后筛选
    • 22. 分组大小筛选
  • 排序相关筛选
    • 23. 最大/最小值筛选
    • 24. 头部/尾部记录
  • 随机抽样筛选
    • 25. 固定数量抽样
    • 26. 比例抽样
  • 重复值处理
    • 27. 查找重复记录
    • 28. 保留首次出现记录
  • 自定义函数筛选
    • 29. apply自定义筛选
    • 30. 使用eval高效筛选
  • 性能优化技巧
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档