4. DataFrame的列选择与过滤

任务说明

本案例使用Pandas构建一个包含员工信息的DataFrame,完成两类核心操作:列选择(按列名选取单列或多列)与行过滤(基于条件表达式筛选满足特定规则的行)。目标是通过最小可复现的代码,掌握DataFrame的索引与布尔筛选机制。

实现代码

import pandas as pd

# 1. 创建示例DataFrame
data = {
    '姓名': ['张伟', '李娜', '王强', '赵敏', '刘洋'],
    '部门': ['技术部', '市场部', '技术部', '财务部', '技术部'],
    '薪资': [15000, 12000, 18000, 10000, 16000],
    '工龄': [3, 5, 7, 2, 4]
}
df = pd.DataFrame(data)

# 2. 列选择
# 选择单列(返回Series)
single_col = df['姓名']

# 选择多列(返回DataFrame)
multi_cols = df[['姓名', '薪资']]

# 3. 行过滤
# 条件1:技术部员工
tech_dept = df[df['部门'] == '技术部']

# 条件2:薪资大于15000
high_salary = df[df['薪资'] > 15000]

# 条件3:技术部且工龄大于3年(复合条件)
tech_senior = df[(df['部门'] == '技术部') & (df['工龄'] > 3)]

# 4. 输出结果
print("=== 原始数据 ===")
print(df)
print("\n=== 单列选择(姓名) ===")
print(single_col)
print("\n=== 多列选择(姓名+薪资) ===")
print(multi_cols)
print("\n=== 过滤:技术部 ===")
print(tech_dept)
print("\n=== 过滤:薪资>15000 ===")
print(high_salary)
print("\n=== 过滤:技术部且工龄>3 ===")
print(tech_senior)

运行方式

确保已安装Pandas(pip install pandas),将上述代码保存为column_filter.py,在终端执行python column_filter.py。

验证方法

观察程序输出,逐项核对:

  • 单列选择:输出为Series,索引为0-4,值为五个姓名,无表头。
  • 多列选择:输出DataFrame包含“姓名”和“薪资”两列,共5行。
  • 技术部过滤:应包含张伟、王强、刘洋三行(索引0、2、4)。
  • 薪资>15000过滤:应包含张伟(15000不满足,注意边界)、王强(18000)、刘洋(16000),即索引2和4两行。
  • 复合条件过滤:技术部且工龄>3,满足的是王强(工龄7)和刘洋(工龄4),索引2和4。

若输出与上述预期一致,则案例实现正确。

DataFrame列选择与过滤操作示意 原始DataFrame 姓名 部门 薪资 工龄 张伟 技术部 15000 3 李娜 市场部 12000 5 王强 技术部 18000 7 赵敏 财务部 10000 2 刘洋 技术部 16000 4 满足复合条件(技术部且工龄>3) 列选择 行过滤 列选择结果 df[['姓名','薪资']] 姓名 薪资 张伟 15000 行过滤结果 df[(df['部门']=='技术部') & (df['工龄']>3)] 姓名 部门 薪资 工龄 王强 技术部 18000 7 刘洋 技术部 16000 4 关键语法 列选择 • df['列名'] → Series • df[['列1','列2']] → DataFrame 行过滤 • df[df['列'] == 值] • df[df['列'] > 数值] • 复合条件用 & 连接 • 每个条件需加括号 注意 • 使用 & 而非 and • 条件必须用括号包裹