Python案例如何实现数据筛选?

wen python案例 21

本文目录导读:

Python案例如何实现数据筛选?

  1. 基础数据结构:列表 (List) 筛选
  2. 字典 (Dict) 筛选
  3. Pandas 库——最常用的数据筛选
  4. NumPy 数组筛选
  5. 综合案例:从 CSV 文件读取并筛选
  6. 总结对比表

Python 中实现数据筛选有多种方式,取决于你使用的数据结构(列表、字典、NumPy 数组、Pandas DataFrame 等),下面我会从基础常用库(特别是 Pandas,因为它在数据处理中最常用)逐一给出案例。


基础数据结构:列表 (List) 筛选

使用 列表推导式 (List Comprehension)filter() 函数。

案例:筛选出所有大于 10 的偶数。

numbers = [1, 5, 12, 15, 18, 21, 24, 30]
# 方法1: 列表推导式(最 Pythonic)
filtered = [x for x in numbers if x > 10 and x % 2 == 0]
print(filtered)  # 输出: [12, 18, 24, 30]
# 方法2: filter() 函数 + lambda
filtered2 = list(filter(lambda x: x > 10 and x % 2 == 0, numbers))
print(filtered2) # 输出: [12, 18, 24, 30]

字典 (Dict) 筛选

通常根据键或值进行筛选。

案例:筛选出所有分数大于 80 的学生。

scores = {
    'Alice': 85,
    'Bob': 63,
    'Charlie': 92,
    'David': 78,
    'Eva': 90
}
# 方法1: 字典推导式
high_scores = {name: score for name, score in scores.items() if score > 80}
print(high_scores)  # 输出: {'Alice': 85, 'Charlie': 92, 'Eva': 90}
# 方法2: 只获取符合条件的名字
high_score_names = [name for name, score in scores.items() if score > 80]
print(high_score_names) # 输出: ['Alice', 'Charlie', 'Eva']

Pandas 库——最常用的数据筛选

Pandas 是 Python 数据分析的核心库,提供了非常直观的条件筛选语法。

假设我们有一个关于员工信息的 CSV 或者 DataFrame:

import pandas as pd
# 创建示例 DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [28, 35, 22, 45, 31],
    'department': ['IT', 'HR', 'IT', 'Finance', 'HR'],
    'salary': [60000, 55000, 70000, 80000, 52000]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

输出:

      name  age department  salary
0    Alice   28         IT   60000
1      Bob   35         HR   55000
2  Charlie   22         IT   70000
3    David   45    Finance   80000
4      Eva   31         HR   52000

1 单条件筛选

案例:选出所有 IT 部门的员工。

it_dept = df[df['department'] == 'IT']
print(it_dept)

输出:

      name  age department  salary
0    Alice   28         IT   60000
2  Charlie   22         IT   70000

2 多条件筛选(使用 & 与 )

案例:选出 IT 部门且年龄大于 25 的员工。

# 注意:每个条件要用括号括起来
result = df[(df['department'] == 'IT') & (df['age'] > 25)]
print(result)

输出:

    name  age department  salary
0  Alice   28         IT   60000

案例:选出 HR 部门 OR 薪资大于 70000 的员工。

result = df[(df['department'] == 'HR') | (df['salary'] > 70000)]
print(result)

输出:

      name  age department  salary
1      Bob   35         HR   55000
3    David   45    Finance   80000
4      Eva   31         HR   52000

3 使用 isin() 筛选多个值

案例:选出部门为 'IT' 或 'HR' 的员工。

result = df[df['department'].isin(['IT', 'HR'])]
print(result)

输出:

      name  age department  salary
0    Alice   28         IT   60000
1      Bob   35         HR   55000
2  Charlie   22         IT   70000
4      Eva   31         HR   52000

4 使用 str.contains() 进行文本模糊筛选

案例:选出名字中包含 'li' 的员工(大小写不敏感)。

# 注意:默认可选参数 case=False 忽略大小写
result = df[df['name'].str.contains('li', case=False)]
print(result)

输出:

      name  age department  salary
0    Alice   28         IT   60000
2  Charlie   22         IT   70000

5 使用 query() 方法(更接近 SQL 语法)

案例:选出年龄小于 30 且薪资大于 55000 的员工。

result = df.query("age < 30 and salary > 55000")
print(result)

输出:

      name  age department  salary
0    Alice   28         IT   60000
2  Charlie   22         IT   70000

NumPy 数组筛选

NumPy 数组支持布尔索引。

案例:筛选出数组中所有大于 50 的元素。

import numpy as np
arr = np.array([15, 45, 60, 78, 32, 90, 10])
# 布尔索引
filtered_arr = arr[arr > 50]
print(filtered_arr)  # 输出: [60 78 90]

综合案例:从 CSV 文件读取并筛选

将上面的知识结合起来,模拟真实场景:

import pandas as pd
# 假设从文件读取数据
df = pd.read_csv('employees.csv')
# 筛选出:
# - 年龄 30~40 岁
# - 薪资大于 60000
# - 部门不是 'Intern'
result = df[
    (df['age'] >= 30) & (df['age'] <= 40) &
    (df['salary'] > 60000) &
    (df['department'] != 'Intern')
]
print(result.head())

总结对比表

数据结构 常用筛选方式 适用场景
列表 列表推导式 [x for x in lst if cond] 简单纯 Python 数据
字典 字典推导式 {k:v for k,v in dct if cond} 小型键值对数据
NumPy 数组 arr[condition] 布尔索引 数值计算、科学计算
Pandas DataFrame df[condition], query(), isin(), str.contains() 表格数据分析、数据清洗

掌握这些方法,你就能应对绝大多数 Python 数据处理场景,如果数据量很大(数万行以上),建议优先使用 Pandas,因为它经过底层优化,性能更好且语法简洁。

抱歉,评论功能暂时关闭!