第 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 —— 只有位置 0print(df.loc[0:1, ["城市"]]) 城市
0 北京
1 上海print(df.iloc[0:2, [2]]) 城市
0 北京
1 上海一句话记忆
loc的右边界加一,iloc的右边界不动。 想知道要拿几行,直接用len()数一下,比盯着切片猜快得多。
Q3:如何根据多个条件筛选数据?#
答: 用 & 连接表示「同时满足」,用 | 连接表示「满足其一」,每个条件都要用圆括号包起来。