4.1 基于标签的选择:loc[] 4.1 基于标签的选择: 是 Pandas 中一个强大且常用的方法,用于基于行和列的标签(label)选择数据。它提供了灵活的方式来访问 DataFrame 的特定行、列或子集,使得数据处理更加直观和易于理解。 核心概念 标签(Label): DataFrame 的索引(行标签)和列名。 基于标签的选择: 使用标签而不是整数位置来选择数据。 切片(Slicing): 使用标签范围来选择连续的行或列。 布尔索引(Boolean Indexing): 使用布尔 Series 或列表来选择满足条件的行。 的语法 的基本语法如下: : 用于选择行的标签或标签列表/切片。 : 用于选择列的标签或标签列表/切片。 注意: 当只提供一个参数时, 默认选择行。
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 描述 loc[] 基本用法的图示:
图示解释:
DataFrame: 代表 Pandas 中的 DataFrame 对象。
loc[]: 表示使用 loc[] 方法进行选择。
Row Labels: 用于指定要选择的行的标签。
Column Labels: 用于指定要选择的列的标签。
Single Label/List/Slice/Boolean Series: 表示行标签可以是单个标签、标签列表、标签切片或布尔 Series。
Single Label/List/Slice: 表示列标签可以是单个标签、标签列表或标签切片。
Selected Rows: 表示根据行标签选择的行。
Selected Columns: 表示根据列标签选择的列。
Resulting DataFrame/Series: 表示最终选择的结果,可以是 DataFrame 或 Series。
loc[] 是 Pandas 中基于标签选择数据的核心工具。 掌握 loc[] 的使用方法,能够更加高效和准确地进行数据处理和分析。 通过本文的详细讲解和代码示例,相信你已经对 loc[] 有了更深入的理解。 在实际应用中,灵活运用 loc[],能够解决各种复杂的数据选择和过滤问题。