写在前面
回顾一下,上篇博客我们学习了 Pandas DataFrame 的数据读取与写入,掌握了数据导入导出的基本技能。 现在,我们已经能够将数据加载到 DataFrame 中了。 接下来,我们需要学习如何 灵活高效地访问和操作 DataFrame 中的数据,才能真正发挥 Pandas 的强大威力。
DataFrame 数据操作的核心:索引与选取
DataFrame 是一个二维表格数据结构,要对 DataFrame 中的数据进行分析和处理,首先需要能够 精准地定位到想要操作的数据。 例如:
- 选取特定的行和列: 例如,选取销售数据表中特定地区的销售额、选取学生信息表中年龄大于 20 岁的学生的姓名和班级。
- 根据条件筛选数据: 例如,筛选销售额大于 10000 的订单、筛选成绩在 80 分以上的学生。
- 修改 DataFrame 中的特定数据: 例如,将某个学生的年龄修改为新的值、将某个地区的销售额更新为最新的数据。
- 对 DataFrame 的子集进行操作: 例如,计算特定地区的平均销售额、对特定班级的学生成绩进行排序。
Excel 的鼠标点击 vs Pandas 的代码精准操控
在 Excel 中,我们通常使用鼠标点击单元格、拖拽选择区域、使用筛选和排序功能来操作数据。 这种方式对于简单的操作还可以接受,但当需要进行 复杂的数据选取和操作,或者需要 自动化数据处理流程 时,Excel 的鼠标点击操作就显得低效且难以自动化了。
Pandas DataFrame 提供了强大且灵活的数据索引与选取机制,让我们能够使用简洁、高效的代码,精准地定位和操作 DataFrame 中的数据,实现各种复杂的数据操作需求:
- 多种索引方式,灵活定位数据: Pandas DataFrame 支持多种索引方式,包括 标签索引 (label-based indexing)、位置索引 (integer-based indexing) 和 布尔索引 (boolean indexing) 等,可以根据不同的需求选择最合适的索引方式,灵活地定位 DataFrame 中的数据。
- 代码精准操控,高效自动化数据操作: 使用 Pandas 代码进行数据索引与选取,可以实现 精准的数据定位 和 批量数据操作,效率远超 Excel 的手动操作。 代码可以轻松实现 自动化数据处理流程,解放重复劳动,提高工作效率。
- 与其他 Pandas 功能无缝衔接: DataFrame 的数据索引与选取功能与 Pandas 的其他数据处理和分析功能 (例如数据清洗、数据转换、数据分析、数据可视化等) 无缝衔接,是构建完整数据分析流程的基础。
本篇博客将深入讲解 Pandas DataFrame 的 数据索引与选取 技巧,让你掌握 DataFrame 数据操作的核心技能,像 “切片面包” 一样灵活地操作你的数据表格,让数据分析工作更加得心应手!
🔑 DataFrame 数据索引与选取方法:多角度定位数据
Pandas DataFrame 提供了多种数据索引与选取方法,可以从不同的角度定位和访问 DataFrame 中的数据。 常用的索引与选取方法包括:
1. 基于标签的索引与选取:.loc[]
.loc[]
是一种 基于标签 (label-based) 的索引与选取方法,它使用 行索引标签 (row labels) 和 列索引标签 (column labels) 来定位 DataFrame 中的数据。 .loc[]
方法是 最常用、最灵活、最推荐使用 的索引与选取方法之一,尤其在需要 根据标签名称进行数据选取 时,.loc[]
方法非常方便和直观。
.loc[]
方法的基本语法:
df.loc[行索引标签, 列索引标签]
行索引标签 (row labels)
: 用于指定要选取的 行,可以是:- 单个行索引标签 (例如
'row1'
,0
,如果行索引是整数标签)。 - 行索引标签列表 (例如
['row1', 'row3', 'row5']
,[0, 2, 4]
,如果行索引是整数标签)。 - 行索引标签切片 (例如
'row1':'row4'
,0:3
,如果行索引是整数标签)。 注意:标签切片是包含结束标签的! - 布尔 Series 或布尔数组 (用于条件筛选行)。
:
(冒号) 表示选取 所有行。
- 单个行索引标签 (例如
列索引标签 (column labels)
: 用于指定要选取的 列,可以是:- 单个列索引标签 (例如
'列名1'
,0
,如果列索引是整数标签)。 - 列索引标签列表 (例如
['列名1', '列名3', '列名5']
,[0, 2, 4]
,如果列索引是整数标签)。 - 列索引标签切片 (例如
'列名1':'列名4'
,0:3
,如果列索引是整数标签)。 注意:标签切片是包含结束标签的! :
(冒号) 表示选取 所有列。
- 单个列索引标签 (例如
示例 1:选取单行数据
import pandas as pd
data = {
'姓名': ['Alice', 'Bob', 'Charlie', 'David'], '年龄': [25, 30, 28, 35], '城市': ['北京', '上海', '广州', '深圳']}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4']) # 创建 DataFrame,指定行索引
row_data = df.loc['row2'] # 选取行索引标签为 'row2' 的行
print(row_data) # 输出 Series,表示一行数据
输出:
姓名 Bob
年龄 30
城市 上海
Name: row2, dtype: object
代码解释:
df.loc['row2']
: 使用.loc[]
方法,行索引标签为'row2'
,列索引标签省略 (默认选取所有列),选取 DataFramedf
中 行索引标签为'row2'
的行。 返回结果row_data
是一个 Series 对象,表示 DataFrame 的一行数据。
示例 2:选取单列数据
import pandas as pd
data = {
'姓名': ['Alice', 'Bob', 'Charlie', 'David'], '年龄': [25, 30, 28, 35], '城市': ['北京', '上海', '广州', '深圳']}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4'])
column_data = df.loc[:, '城市'] # 选取列索引标签为 '城市' 的列
print(column_data) # 输出 Series,表示一列数据
输出:
row1 北京
row2 上海
row3 广州
row4 深圳
Name: 城市, dtype: object
代码解释:
df.loc[:, '城市']
: 使用.loc[]
方法,行索引标签为:
(选取所有行),列索引标签为'城市'
,选取 DataFramedf
中 列索引标签为'城市'
的列。 返回结果column_data
是一个 Series 对象,表示 DataFrame 的一列数据。
示例 3:选取指定行和列的数据
import pandas as pd
data = {
'姓名': ['Alice', 'Bob', 'Charlie', 'David'], '年龄': [25, 30, 28, 35], '城市': ['北京', '上海', '广州', '深圳']}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4'])
specific_data = df.loc[[