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