择洗篇-Day14|切片备料:列选取、行选取、切片与排序

0 次阅读 2026-10-21 15:08

📖 知识点

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) 降序,默认升序

⚠️ 易错提醒

  1. 选多列要双层方括号 df[["a","b"]],单层只返回一个 Series
  2. sort_values 默认返回新表,不改原表
  3. 切片 df[1:3] 是不含末位(取 1、2 行),和 Python 切片一致

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas,创建一份数据(菜名、价格、数量)
  2. 用 df[["菜名","价格"]] 选取两列
  3. 用 df[:2] 选取前 2 行
  4. 用 df.loc[[0,2], ["菜名","价格"]] 按标签组合选取
  5. 用 df.sort_values("价格", ascending=False) 按价格降序
  6. 打印各结果

参考代码

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)" 排最前,是最贵的菜。

🧠 思考题

  1. df[["菜名","价格"]] 和 df["菜名"] 返回的结果有什么区别(表格 vs 单列)?
  2. 想找出 "价格最高的前 2 道菜",该用排序还是筛选?怎么写?