当前位置:首页 > Python > 正文

Pandas数据框行选择完全指南 | 高效数据处理技巧

Pandas数据框行选择完全指南

在数据分析过程中,有效地选择和操作数据框的行是至关重要的技能。本指南将详细介绍Pandas中各种行选择方法,帮助您提升数据处理效率。

示例数据框

在开始学习各种选择方法前,我们先创建一个示例数据框:

import pandas as pd

data = {
    '姓名': ['张三', '李四', '王五', '赵六', '钱七'],
    '年龄': [25, 32, 28, 35, 29],
    '城市': ['北京', '上海', '广州', '深圳', '杭州'],
    '工资': [15000, 18000, 22000, 25000, 19000],
    '入职年份': [2019, 2017, 2018, 2016, 2020]
}

df = pd.DataFrame(data)
print(df)

数据框内容:

索引 姓名 年龄 城市 工资 入职年份
0 张三 25 北京 15000 2019
1 李四 32 上海 18000 2017
2 王五 28 广州 22000 2018
3 赵六 35 深圳 25000 2016
4 钱七 29 杭州 19000 2020

1. 使用loc选择行

loc基于标签选择数据,可以同时选择行和列。

选择单行

# 选择索引为2的行
row_2 = df.loc[2]
print(row_2)

选择多行

# 选择索引1到3的行
rows_1_3 = df.loc[1:3]
print(rows_1_3)

选择特定行

# 选择索引为0和4的行
specific_rows = df.loc[[0, 4]]
print(specific_rows)

选择行和列

# 选择索引1-3的行,以及"姓名"和"工资"列
subset = df.loc[1:3, ['姓名', '工资']]
print(subset)

2. 使用iloc选择行

iloc基于整数位置选择数据,类似于Python的列表索引。

选择单行

# 选择第三行(索引为2)
third_row = df.iloc[2]
print(third_row)

选择多行

# 选择第2-4行(索引1-3)
rows_2_4 = df.iloc[1:4]
print(rows_2_4)

选择不连续的行

# 选择第1行和第4行(索引0和3)
specific_rows = df.iloc[[0, 3]]
print(specific_rows)

选择行和列

# 选择第1-3行,第0、2、4列
subset = df.iloc[0:3, [0, 2, 4]]
print(subset)

3. 布尔索引(条件选择)

使用布尔条件选择满足特定条件的行。

单条件选择

# 选择年龄大于30的员工
older_than_30 = df[df['年龄'] > 30]
print(older_than_30)

多条件选择

# 选择工资在20000以上且在上海的员工
high_salary_shanghai = df[(df['工资'] > 20000) & (df['城市'] == '上海')]
print(high_salary_shanghai)

使用isin方法

# 选择城市在北京或广州的员工
beijing_guangzhou = df[df['城市'].isin(['北京', '广州'])]
print(beijing_guangzhou)

结合loc使用

# 选择2020年后入职的员工,只显示姓名和工资
recent_employees = df.loc[df['入职年份'] >= 2020, ['姓名', '工资']]
print(recent_employees)

4. 使用query方法

query方法提供了一种更简洁的条件筛选语法。

基本查询

# 选择工资超过20000的员工
high_earners = df.query("工资 > 20000")
print(high_earners)

多条件查询

# 选择年龄在25-30之间且在北上广的员工
young_city = df.query("25 <= 年龄 <= 30 and 城市 in ['北京', '上海', '广州']")
print(young_city)

使用变量查询

# 使用变量作为查询条件
min_salary = 18000
max_age = 30

result = df.query("工资 >= @min_salary and 年龄 <= @max_age")
print(result)

5. 切片选择

直接使用Python切片语法选择连续的行。

基本切片

# 选择前3行
first_three = df[:3]
print(first_three)

# 选择第2行到最后一行
from_second = df[1:]
print(from_second)

步长切片

# 每隔一行选择一行
every_other = df[::2]
print(every_other)

6. 方法比较与选择建议

方法 优点 缺点 使用场景
loc 基于标签选择,直观易读 需要知道标签名 按标签选择行/列
iloc 基于位置,选择快速 位置变动时可能出错 按位置选择行/列
布尔索引 灵活的条件选择 复杂条件语法稍长 条件筛选行
query 语法简洁,可读性好 复杂表达式支持有限 简单条件筛选
切片 简单快速 只能选择连续行 选择连续行范围

最佳实践建议

  • 明确标签时优先使用loc
  • 按位置选择时使用iloc
  • 复杂条件筛选使用布尔索引
  • 简单条件筛选可考虑query提高可读性
  • 选择连续行范围使用切片语法
  • 组合使用这些方法可以完成绝大多数行选择需求

总结

掌握Pandas的行选择方法是数据处理的基础。根据具体情况选择合适的方法:

  • 使用loc进行基于标签的选择
  • 使用iloc进行基于位置的选择
  • 使用布尔索引进行条件筛选
  • 使用query简化查询语法
  • 使用切片选择连续行范围

灵活组合这些方法,可以高效地完成各种数据选择任务,为后续的数据分析和处理打下坚实基础。

发表评论