第 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 的语法是 [行标签, 列名],中间用逗号隔开: