返回首页

Roadmap
更新于 2026年10月28日 全文 343 字未阅读

第 2.1 节 核心知识点#

预计学习时长: 35 分钟

本节目标:

  • 分清 loc(按标签)和 iloc(按位置),不再用错;
  • 记住切片在 loc 里是闭区间、在 iloc 里是开区间;
  • 会用布尔索引按一个或多个条件筛数据;
  • 会一次取出多列,并且知道多列取出来仍然是 DataFrame;
  • 会用 set_index() 换掉行标签,用 reset_index() 换回来。

本课程使用的 Pandas 版本是 '3.1.0'

DataFrame 中的两套坐标系统#

在第 1 章中你见过 df.shape 输出 (8, 8),还有每一行左边的数字:

import pandas as pd

data = {
    "订单号":   [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],
    "下单日期": ["2024-01-05", "2024-01-08", "2024-01-12", "2024-02-03",
                 "2024-02-15", "2024-03-02", "2024-03-20", "2024-04-08"],
    "城市":     ["北京", "上海", "北京", "广州", "上海", "北京", "深圳", "广州"],
    "商品":     ["手机", "电脑", "耳机", "手机", "键盘", "显示器", "耳机", "手机"],
    "销量":     [2, 1, 3, 2, 5, 1, 4, 2],
    "单价":     [3999.0, 7999.0, 599.0, 3999.0, 299.0, 1299.0, 599.0, 3999.0],
    "金额":     [7998.0, 7999.0, 1797.0, 7998.0, 1495.0, 1299.0, 2396.0, 7998.0],
    "客户评分": [4.5, 4.0, 4.8, 3.9, 4.2, 4.6, 4.1, 4.9],
}
df = pd.DataFrame(data)
print(df)
print(df.index)

输出:

    订单号        下单日期  城市   商品  销量      单价      金额  客户评分
0  1001  2024-01-05  北京   手机   2  3999.0  7998.0   4.5
1  1002  2024-01-08  上海   电脑   1  7999.0  7999.0   4.0
2  1003  2024-01-12  北京   耳机   3   599.0  1797.0   4.8
3  1004  2024-02-03  广州   手机   2  3999.0  7998.0   3.9
4  1005  2024-02-15  上海   键盘   5   299.0  1495.0   4.2
5  1006  2024-03-02  北京  显示器   1  1299.0  1299.0   4.6
6  1007  2024-03-20  深圳   耳机   4   599.0  2396.0   4.1
7  1008  2024-04-08  广州   手机   2  3999.0  7998.0   4.9
RangeIndex(start=0, stop=8, step=1)

在上面的输出结果中,表格左边这一列数字叫索引(index),它是每行的标签。在 Pandas 中有两套取数方式,区别就在于用标签找,还是用位置找:

按标签按位置
方法df.loc[...]df.iloc[...]
依据索引的真实值(现在是 0,1,2...)第几个(永远是 0,1,2...)
切片是否含末尾含(闭区间)不含(开区间)
列怎么写写列名 "城市"写列序号 2
什么时候用数据有业务含义的标签时你只关心「第几行」时

一句话记法 loc = label(标签),iloc = integer location(整数位置)。

知识点 1:loc vs iloc#

用 loc 取单个值#

loc 的语法是 [行标签, 列名],中间用逗号隔开:

阅读 --