当前位置: 首页 > news >正文

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 文件,完成以下操作:

📝 练习列表

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

  2. 筛选出成绩不及格的男生

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

  4. 统计男女生人数(使用 value_counts

  5. 按性别分组后,计算各组平均成绩(使用 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🎯 男女生人数统计:
    性别
    男    22
    Name: count, dtype: int64🎯 按性别分组的平均成绩:
    性别
    女    78.073.5
    Name: 成绩, dtype: float64
    

✍️ 今日总结

  • 掌握了布尔索引与逻辑运算筛选数据
  • 熟悉了多列组合排序操作
  • 学会了常用的数据子集提取方法
  • 初步接触了分组聚合分析
http://www.lqws.cn/news/462349.html

相关文章:

  • 当数据自己会说话:聚类与分类算法全景解析
  • 大模型在急性弥漫性腹膜炎预测及治疗方案制定中的应用研究
  • springboot口腔管理平台
  • CSS 动画:深入解析与高效实践
  • cursor中定义cursor rules
  • 【入门】【例18.2】 孔融让梨
  • 华为云Flexus+DeepSeek征文 | 基于Flexus X实例的金融AI Agent开发:智能风控与交易决策系统
  • 《Effective Python》第九章 并发与并行——使用 concurrent.futures 实现真正的并行化
  • shell脚本--条件
  • 互联网大厂Java求职面试:AI与大模型技术下的RAG系统架构设计与性能优化
  • 天若 OCR效率工具F4 截图秒识别,多语言混合文本准确率高离线识别保隐私
  • SpringBoot电脑商城项目--显示购物车列表
  • 基于ARM ubuntu如何进行交叉编译
  • RA4M2开发IOT(0)----安装e² studio
  • 【 CVPR2025】计算机视觉|CEM : 模型逆向工程?条件熵最大化来啦!
  • 【设计模式】4.代理模式
  • 如何优化HarmonyOS 5的分布式通信性能?
  • 专业APP定制开发方案详解
  • 【网络产品经营】园区网络
  • Qt Library库系列----Serial串口
  • vue3+arcgisAPI4案例:智慧林业资源监测分析平台(附源码下载)
  • 闲庭信步使用SV进行图像处理系列教程介绍
  • Qt、C++自定义按钮、组件、事件编程开发练习,万字实战解析!!
  • Django中为api自定义一些装饰器:如参数校验等
  • GIFPlayer 使用指南:创建可调速的 GIF 播放器
  • 59-Oracle 10046事件-知识准备
  • Java面试复习指南:JVM原理、并发编程与Spring框架
  • Python UDP Socket 实时在线刷卡扫码POS消费机服务端示例源码
  • 「Linux文件及目录管理」通配符与文件名
  • 使用 Isaac Sim 模拟机器人