返回首页

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

第 2.3 节 常见问题#

这一节收集了初学者在「取数」环节最常卡的 10 个问题。每个问题都给出直接答案,能跑代码的都附上完整示例。

怎么用这一节 不用通读。遇到问题用 Ctrl+F 搜关键词,直接跳到对应那条。

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

准备一下数据,下面每题都会用到:

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)

Q1:loc 和 iloc 有什么区别?#

答: 一个按标签找,一个按位置找。

  • df.loc[...] —— 用索引里真实存在的值来定位,比如订单号 1003、字符串标签 "北京";

  • df.iloc[...] —— 只认「第几个」,永远是 0, 1, 2...,而且切片时不包含末尾。

df.loc[2, "城市"]    # 按标签:标签 2 那一行的「城市」
df.iloc[2, 2]        # 按位置:第 3 行第 3 列

判断用哪个的简单办法 你的行标签是默认的 0~7 时,两者「看起来」差不多,容易混。但你一旦 set_index("订单号"),行标签变成 1001~1008,df.loc[1003] 才对,df.iloc[1003] 就会直接越界报错。 记住:业务字段当索引用 loc,单纯数位置用 iloc。

Q2:使用 loc 和 iloc 进行切片时,结束位置是否包含在结果中?#

答: loc 包含右端,iloc 不包含右端。

print(len(df.loc[0:1]))    # 2 —— 标签 0 和 1 都要
print(len(df.iloc[0:1]))   # 1 —— 只有位置 0
print(df.loc[0:1, ["城市"]])
   城市
0  北京
1  上海
print(df.iloc[0:2, [2]])
   城市
0  北京
1  上海

一句话记忆 loc 的右边界加一,iloc 的右边界不动。 想知道要拿几行,直接用 len() 数一下,比盯着切片猜快得多。

Q3:如何根据多个条件筛选数据?#

答: 用 & 连接表示「同时满足」,用 | 连接表示「满足其一」,每个条件都要用圆括号包起来。

阅读 --