云计算百科
云计算领域专业知识百科平台

Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作

🎯 今日目标

  • 掌握 DataFrame 的条件筛选(布尔索引)
  • 学会多条件筛选、逻辑运算
  • 熟练使用排序(sort_values)提升数据组织力
  • 结合列选择进行数据提取分析

🧪 一、列选择与基本筛选

✅ 选择单列 / 多列

df["成绩"] # 返回 Series
df[["姓名", "成绩"]] # 返回新的 DataFrame


✅ 条件筛选(布尔索引)

# 筛选出成绩大于 80 的学生
df[df["成绩"] > 80]

# 获取性别为“女”的学生
df[df["性别"] == "女"]


✅ 多条件筛选(逻辑运算符)

# 成绩大于 80 且是男生
df[(df["成绩"] > 80) & (df["性别"] == "男")]

# 成绩不及格 或 未填写是否及格
df[(df["成绩"] < 60) | (df["是否及格"] == False)]

⚠️ 注意:逻辑运算使用 &、|、~,并加上括号!


🔢 二、数据排序

✅ 按单列排序

df.sort_values("成绩") # 升序
df.sort_values("成绩", ascending=False) # 降序

✅ 按多个字段排序

df.sort_values(["是否及格", "成绩"], ascending=[True, False])


🔍 三、列选择 + 排序综合练习

df[df["性别"] == "女"][["姓名", "成绩"]].sort_values("成绩", ascending=False)


🧪 今日练习任务

使用前两天处理好的 students_cleaned.csv 文件,完成以下操作:

📝 练习列表

  • 筛选出成绩大于等于 80 的学生

  • 筛选出成绩不及格的男生

  • 按成绩从高到低排序,并只显示“姓名”和“成绩”

  • 统计男女生人数(使用 value_counts)

  • 按性别分组后,计算各组平均成绩(使用 groupby)

    import pandas as pd
    import os

    # 加载数据文件路径
    input_path = "data/students_cleaned.csv"

    if not os.path.exists(input_path):
    raise FileNotFoundError("❌ 找不到文件:data/students_cleaned.csv。请先运行前两天的清洗脚本。")

    # 加载 DataFrame
    df = pd.read_csv(input_path)
    print("📊 数据加载成功:")
    print(df.head())

    # 1. 筛选出成绩 ≥ 80 的学生
    print("\\n🎯 成绩 ≥ 80 的学生:")
    print(df[df["成绩"] >= 80])

    # 2. 筛选出成绩不及格的男生
    print("\\n🎯 成绩不及格的男生:")
    condition = (df["成绩"] < 60) & (df["性别"] == "男")
    print(df[condition])

    # 3. 按成绩从高到低排序,显示“姓名”和“成绩”
    print("\\n🎯 按成绩排序(降序)显示姓名和成绩:")
    sorted_df = df.sort_values("成绩", ascending=False)[["姓名", "成绩"]]
    print(sorted_df)

    # 4. 统计性别分布
    print("\\n🎯 男女生人数统计:")
    print(df["性别"].value_counts())

    # 5. 按性别分组,统计平均成绩
    print("\\n🎯 按性别分组的平均成绩:")
    print(df.groupby("性别")["成绩"].mean())

    结果输出:

    📊 数据加载成功:
    姓名 性别 成绩 是否及格
    0 张三 男 88.0 True
    1 李四 女 78.0 True
    2 王五 男 59.0 False
    3 田七 女 78.0 False

    🎯 成绩 ≥ 80 的学生:
    姓名 性别 成绩 是否及格
    0 张三 男 88.0 True

    🎯 成绩不及格的男生:
    姓名 性别 成绩 是否及格
    2 王五 男 59.0 False

    🎯 按成绩排序(降序)显示姓名和成绩:
    姓名 成绩
    0 张三 88.0
    1 李四 78.0
    3 田七 78.0
    2 王五 59.0

    🎯 男女生人数统计:
    性别
    2
    2
    Name: count, dtype: int64

    🎯 按性别分组的平均成绩:
    性别
    78.0
    73.5
    Name: 成绩, dtype: float64


  • ✍️ 今日总结

    • 掌握了布尔索引与逻辑运算筛选数据
    • 熟悉了多列组合排序操作
    • 学会了常用的数据子集提取方法
    • 初步接触了分组聚合分析
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!