零基础上手Python数据分析 (10):DataFrame 数据索引与选取

写在前面

回顾一下,上篇博客我们学习了 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',列索引标签省略 (默认选取所有列),选取 DataFrame df行索引标签为 '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[] 方法,行索引标签为 : (选取所有行),列索引标签为 '城市',选取 DataFrame df列索引标签为 '城市' 的列。 返回结果 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[[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kakaZhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值