📖 知识点
1. loc:按 "标签 / 名字" 取数据
loc[行, 列],行和列都用名字 / 标签:
# 取指定行的某列(按行名0,列名"价格")
df.loc[0, "价格"]
# 取某几行
df.loc[[0, 2]] # 取索引0、2两行
# 取某几列
df.loc[:, ["菜名", "价格"]] # 取菜名、价格两列(:表示所有行)
2. iloc:按 "位置编号" 取数据
iloc[行, 列],用整数位置(第 0 行、第 1 列…):
# 取第0行第1列(位置)
df.iloc[0, 1]
# 取前两行
df.iloc[:2]
# 取第1、2列
df.iloc[:, 1:3] # 第1列到第2列(不含3)
3. 条件筛选:取 "符合条件" 的行
这是最常用的 —— 按条件挑行:
# 取"价格 > 3"的所有行
df[df["价格"] > 3]
# 组合条件 &(且) |(或)
df[(df["价格"] > 3) & (df["数量"] > 15)]
完整示例
import pandas as pd
data = {
"菜名": ["白菜", "番茄", "土豆", "黄瓜"],
"价格": [3, 5, 2, 4],
"数量": [10, 20, 30, 15],
}
df = pd.DataFrame(data)
print(df.loc[0, "价格"]) # 按名字取:第0行价格=3
print(df.iloc[0, 1]) # 按位置取:第0行第1列=3
print(df[df["价格"] > 3]) # 条件筛选:价格>3的行
💡 三招对比
方法 用什么选 例子 loc标签 / 名字 df.loc[0, "价格"]iloc位置编号 df.iloc[0, 1]条件筛选 布尔条件 df[df["价格"]>3]
⚠️ 易错提醒
loc用名字(列名、索引名),iloc用数字位置,别混用- 条件筛选的
df["价格"]>3外面要再加一层df[...]- 多条件用
&(且)、|(或),每个条件要加括号
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份数据(菜名、价格、数量)
- 用
loc按名字取第 0 行的 "价格" - 用
iloc按位置取第 0 行第 1 列 - 用条件筛选取 "价格大于 3" 的所有行
- 用组合条件取 "价格 > 3 且 数量 > 15" 的行
参考代码
import pandas as pd
data = {
"菜名": ["白菜", "番茄", "土豆", "黄瓜"],
"价格": [3, 5, 2, 4],
"数量": [10, 20, 30, 15],
}
df = pd.DataFrame(data)
print("===== 原表 =====")
print(df)
# loc:按名字取
print("\n===== loc 取第0行价格 =====")
print(df.loc[0, "价格"])
# iloc:按位置取
print("\n===== iloc 取第0行第1列 =====")
print(df.iloc[0, 1])
# 条件筛选
print("\n===== 价格>3 的行 =====")
print(df[df["价格"] > 3])
print("\n===== 价格>3 且 数量>15 的行 =====")
print(df[(df["价格"] > 3) & (df["数量"] > 15)])
运行输出:
===== 原表 =====
菜名 价格 数量
0 白菜 3 10
1 番茄 5 20
2 土豆 2 30
3 黄瓜 4 15
===== loc 取第0行价格 =====
3
===== iloc 取第0行第1列 =====
3
===== 价格>3 的行 =====
菜名 价格 数量
1 番茄 5 20
3 黄瓜 4 15
===== 价格>3 且 数量>15 的行 =====
菜名 价格 数量
1 番茄 5 20
💡 观察:
loc和iloc都能取到 3(第 0 行的价格);条件筛选精准挑出 "价格 > 3" 和 "且数量 > 15" 的行。
🧠 思考题
loc[0, "价格"]和iloc[0, 1]分别靠什么定位?它们取到的值一样吗?- 组合条件筛选时,
&和|各代表什么?每个条件为什么必须加括号?
行者孙Python