4.1 基于标签的选择:loc[]


文档摘要

4.1 基于标签的选择:loc[] 4.1 基于标签的选择: 是 Pandas 中一个强大且常用的方法,用于基于行和列的标签(label)选择数据。它提供了灵活的方式来访问 DataFrame 的特定行、列或子集,使得数据处理更加直观和易于理解。 核心概念 标签(Label): DataFrame 的索引(行标签)和列名。 基于标签的选择: 使用标签而不是整数位置来选择数据。 切片(Slicing): 使用标签范围来选择连续的行或列。 布尔索引(Boolean Indexing): 使用布尔 Series 或列表来选择满足条件的行。 的语法 的基本语法如下: : 用于选择行的标签或标签列表/切片。 : 用于选择列的标签或标签列表/切片。 注意: 当只提供一个参数时, 默认选择行。

4.1 基于标签的选择:loc[]

4.1 基于标签的选择:loc[]

loc[] 是 Pandas 中一个强大且常用的方法,用于基于行和列的标签(label)选择数据。它提供了灵活的方式来访问 DataFrame 的特定行、列或子集,使得数据处理更加直观和易于理解。

核心概念

  • 标签(Label): DataFrame 的索引(行标签)和列名。

  • 基于标签的选择: 使用标签而不是整数位置来选择数据。

  • 切片(Slicing): 使用标签范围来选择连续的行或列。

  • 布尔索引(Boolean Indexing): 使用布尔 Series 或列表来选择满足条件的行。

loc[] 的语法

loc[] 的基本语法如下:

df.loc[row_labels, column_labels]
  • row_labels: 用于选择行的标签或标签列表/切片。

  • column_labels: 用于选择列的标签或标签列表/切片。

注意:

  • 当只提供一个参数时,loc[] 默认选择行。

  • loc[] 在切片时包含结束标签。

代码实践与详解

1. 创建 DataFrame

首先,创建一个示例 DataFrame,方便后续演示:

import pandas as pd data = {'姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'], '年龄': [25, 30, 22, 28, 24], '城市': ['北京', '上海', '广州', '深圳', '杭州'], '成绩': [85, 92, 78, 88, 95]} df = pd.DataFrame(data) df = df.set_index('姓名') # 将姓名设置为索引 print(df)

输出:

年龄 城市 成绩 姓名 Alice 25 北京 85 Bob 30 上海 92 Charlie 22 广州 78 David 28 深圳 88 Emily 24 杭州 95

2. 选择单行

使用行标签选择单行:

row_alice = df.loc['Alice'] print(row_alice)

输出:

年龄 25 城市 北京 成绩 85 Name: Alice, dtype: object

3. 选择多行

使用标签列表选择多行:

rows_alice_bob = df.loc[['Alice', 'Bob']] print(rows_alice_bob)

输出:

年龄 城市 成绩 姓名 Alice 25 北京 85 Bob 30 上海 92

4. 选择行的切片

使用标签切片选择连续的行(包含结束标签):

rows_alice_charlie = df.loc['Alice':'Charlie'] print(rows_alice_charlie)

输出:

年龄 城市 成绩 姓名 Alice 25 北京 85 Bob 30 上海 92 Charlie 22 广州 78

5. 选择单列

使用列标签选择单列:

ages = df.loc[:, '年龄'] print(ages)

输出:

姓名 Alice 25 Bob 30 Charlie 22 David 28 Emily 24 Name: 年龄, dtype: int64

6. 选择多列

使用标签列表选择多列:

age_city = df.loc[:, ['年龄', '城市']] print(age_city)

输出:

年龄 城市 姓名 Alice 25 北京 Bob 30 上海 Charlie 22 广州 David 28 深圳 Emily 24 杭州

7. 选择列的切片

使用标签切片选择连续的列(包含结束标签):

city_score = df.loc[:, '城市':'成绩'] print(city_score)

输出:

城市 成绩 姓名 Alice 北京 85 Bob 上海 92 Charlie 广州 78 David 深圳 88 Emily 杭州 95

8. 选择特定行和列的交叉部分

同时指定行和列的标签/切片:

alice_age = df.loc['Alice', '年龄'] print(alice_age) # 输出:25 alice_bob_age_city = df.loc[['Alice', 'Bob'], ['年龄', '城市']] print(alice_bob_age_city)

输出:

25 年龄 城市 姓名 Alice 25 北京 Bob 30 上海

9. 布尔索引

使用布尔 Series 或列表来选择满足条件的行。

# 选择年龄大于 25 的人 older_than_25 = df['年龄'] > 25 older_people = df.loc[older_than_25] print(older_people)

输出:

年龄 城市 成绩 姓名 Bob 30 上海 92 David 28 深圳 88

也可以直接在 loc[] 中使用布尔表达式:

older_people = df.loc[df['年龄'] > 25] print(older_people)

10. 结合布尔索引和列选择

# 选择年龄大于 25 的人的姓名和城市 older_people_name_city = df.loc[df['年龄'] > 25, ['城市']] print(older_people_name_city)

输出:

城市 姓名 Bob 上海 David 深圳

11. 使用函数进行条件选择

# 定义一个函数,判断成绩是否优秀 def is_excellent(score): return score >= 90 # 使用函数选择成绩优秀的人 excellent_students = df.loc[df['成绩'].apply(is_excellent)] print(excellent_students)

输出:

年龄 城市 成绩 姓名 Bob 30 上海 92 Emily 24 杭州 95

loc[] 的注意事项

  • KeyError: 如果指定的标签不存在于 DataFrame 的索引或列中,loc[] 会抛出 KeyError 异常。

  • 切片包含结束标签: 与 Python 列表切片不同,loc[] 的标签切片包含结束标签。

  • 性能: 对于大型 DataFrame,使用 loc[] 进行基于标签的选择通常比基于整数位置的选择(iloc[])更快。

loc[] 的应用场景

  • 数据清洗: 根据特定条件筛选和修改数据。

  • 数据分析: 提取特定人群或时间段的数据进行分析。

  • 数据可视化: 准备用于绘制图表的数据子集。

  • 机器学习: 创建训练集和测试集。

Mermaid 图示

以下是一个使用 Mermaid 描述 loc[] 基本用法的图示:

图示解释:

  1. DataFrame: 代表 Pandas 中的 DataFrame 对象。

  2. loc[]: 表示使用 loc[] 方法进行选择。

  3. Row Labels: 用于指定要选择的行的标签。

  4. Column Labels: 用于指定要选择的列的标签。

  5. Single Label/List/Slice/Boolean Series: 表示行标签可以是单个标签、标签列表、标签切片或布尔 Series。

  6. Single Label/List/Slice: 表示列标签可以是单个标签、标签列表或标签切片。

  7. Selected Rows: 表示根据行标签选择的行。

  8. Selected Columns: 表示根据列标签选择的列。

  9. Resulting DataFrame/Series: 表示最终选择的结果,可以是 DataFrame 或 Series。

总结

loc[] 是 Pandas 中基于标签选择数据的核心工具。 掌握 loc[] 的使用方法,能够更加高效和准确地进行数据处理和分析。 通过本文的详细讲解和代码示例,相信你已经对 loc[] 有了更深入的理解。 在实际应用中,灵活运用 loc[],能够解决各种复杂的数据选择和过滤问题。


发布者: 作者: 转发
评论区 (0)
U