📖 知识点
1. 选取指定的列
# 只取"菜名"一列
df["菜名"]
# 取多列(返回新表)
df[["菜名", "价格"]]
2. 选取指定的行(切片)
# 取前2行
df[:2]
# 取中间连续几行(第1到第3行,不含3)
df[1:3]
3. 按条件 / 标签组合选取(复习 loc/iloc)
# 取指定行和指定列
df.loc[[0, 2], ["菜名", "价格"]]
# 取前3行、后2列
df.iloc[:3, -2:]
4. sort_values ():排序
# 按"价格"升序(默认从小到大)
df.sort_values("价格")
# 按"价格"降序(从大到小)
df.sort_values("价格", ascending=False)
# 按多列排序(先价格、再数量)
df.sort_values(["价格", "数量"], ascending=[False, True])
ascending=False表示降序。找最贵、最高、最大常用降序后取头行。
完整示例
import pandas as pd
data = {
"菜名": ["白菜", "番茄", "土豆", "黄瓜"],
"价格": [3, 5, 2, 4],
"数量": [10, 20, 30, 15],
}
df = pd.DataFrame(data)
print(df[["菜名", "价格"]]) # 选列
print(df.sort_values("价格", ascending=False)) # 按价格降序
💡 理解
- 选列:
df["列"]或df[["列1","列2"]]- 选行:
df[:n]切片、df[1:3]区间- 排序:
sort_values("列", ascending=False)降序,默认升序
⚠️ 易错提醒
- 选多列要双层方括号
df[["a","b"]],单层只返回一个 Seriessort_values默认返回新表,不改原表- 切片
df[1:3]是不含末位(取 1、2 行),和 Python 切片一致
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份数据(菜名、价格、数量)
- 用
df[["菜名","价格"]]选取两列 - 用
df[:2]选取前 2 行 - 用
df.loc[[0,2], ["菜名","价格"]]按标签组合选取 - 用
df.sort_values("价格", ascending=False)按价格降序 - 打印各结果
参考代码
import pandas as pd
data = {
"菜名": ["白菜", "番茄", "土豆", "黄瓜"],
"价格": [3, 5, 2, 4],
"数量": [10, 20, 30, 15],
}
df = pd.DataFrame(data)
print("===== 原表 =====")
print(df)
print("\n===== 1. 选取 菜名、价格 两列 =====")
print(df[["菜名", "价格"]])
print("\n===== 2. 选取前2行 =====")
print(df[:2])
print("\n===== 3. loc 组合选取 =====")
print(df.loc[[0, 2], ["菜名", "价格"]])
print("\n===== 4. 按价格降序 =====")
print(df.sort_values("价格", ascending=False))
运行输出:
===== 原表 =====
菜名 价格 数量
0 白菜 3 10
1 番茄 5 20
2 土豆 2 30
3 黄瓜 4 15
===== 1. 选取 菜名、价格 两列 =====
菜名 价格
0 白菜 3
1 番茄 5
2 土豆 2
3 黄瓜 4
===== 2. 选取前2行 =====
菜名 价格 数量
0 白菜 3 10
1 番茄 5 20
===== 3. loc 组合选取 =====
菜名 价格
0 白菜 3
2 土豆 2
===== 4. 按价格降序 =====
菜名 价格 数量
1 番茄 5 20
3 黄瓜 4 15
0 白菜 3 10
2 土豆 2 30
💡 观察:选列、选行、组合选、降序排序各有用途。降序后 "番茄 (5)" 排最前,是最贵的菜。
🧠 思考题
df[["菜名","价格"]]和df["菜名"]返回的结果有什么区别(表格 vs 单列)?- 想找出 "价格最高的前 2 道菜",该用排序还是筛选?怎么写?