← Python 学习路线(共 8 章)

第 8 章 数据处理与综合实战

red wenzi · 2026-09-15 · 编程语言 · Python · 📖 预计阅读 9 分钟 · 共 2 道练习
🎯 本章你会学到:csv 模块与 pandas 快速上手,以及一道把全篇串起来的综合题。建议边读边敲,每节练习先自己做,再展开答案对照。

Python 最被低估的能力是“处理数据”:读表格、算统计、排个序、导出结果,几行就够。这一章用标准库 csv 和第三方库 pandas 各演示一遍。

标准库:csv

用 csv 解析表格文本
import csv
import io
import statistics

raw = """name,score
Ann,90
Bob,59
Cid,88
"""
rows = list(csv.DictReader(io.StringIO(raw)))
scores = [int(r["score"]) for r in rows]

print(len(scores), statistics.mean(scores))
print(max(rows, key=lambda r: int(r["score"]))["name"])
运行结果
3 79
Ann

第三方:pandas

pandas 快速上手(需要 pip install pandas)
import pandas as pd

df = pd.DataFrame({"name": ["Ann", "Bob", "Cid"], "score": [90, 59, 88]})
print(f"{df['score'].mean():.2f}")
print(df[df["score"] >= 60]["name"].tolist())
print(df.sort_values("score", ascending=False)["name"].tolist())
运行结果
79.00
['Ann', 'Cid']
['Ann', 'Cid', 'Bob']

对比一下:标准库版本要自己切分、转换、统计;pandas 一行 df["score"].mean() 就完了。数据量大、要反复筛选分组时,pandas 的效率优势非常明显——这也是博客里数据科学线的主线工具。

需求标准库做法pandas 做法
读 CSVcsv.DictReaderpd.read_csv("a.csv")
求平均statistics.mean([...])df["score"].mean()
筛选列表推导式df[df["score"] >= 60]
排序sorted(..., key=...)df.sort_values("score")
分组统计自己写字典累加df.groupby("name").sum()
⚠️ 易错点 pandas 不是标准库,要先 pip install pandas;生产环境建议用虚拟环境(python -m venv .venv)隔离依赖。
⚠️ 易错点 读 CSV 时中文乱码通常是编码问题:pd.read_csv(path, encoding="utf-8")"gbk" 试一下。

✍️ 本节练习

8.1必做解析逗号分隔数据

读入 n 行「姓名,分数」(逗号分隔),输出人数、平均分(2 位小数)和按分数降序的姓名列表。

输入 第一行 n;接下来 n 行「姓名,分数」。

输出 三行:count=avg=rank=[...]

样例输入
3
Ann,90
Bob,59
Cid,88
样例输出
count=3
avg=79.00
rank=['Ann', 'Cid', 'Bob']

💡 提示 用 input().split(",") 拆开,存成元组列表后排序。

✅ 查看参考答案与解析
n = int(input())
people = []
for _ in range(n):
    name, score = input().split(",")
    people.append((name, int(score)))

avg = sum(s for _, s in people) / len(people)
rank = [name for name, _ in sorted(people, key=lambda p: -p[1])]

print(f"count={len(people)}")
print(f"avg={avg:.2f}")
print(f"rank={rank}")

解析 sorted(..., key=lambda p: -p[1]) 按分数降序;打印列表本身会带方括号和引号,这也是 Python 列表的标准表示。

8.2挑战文本统计(全篇综合)

读入一行英文文本,输出字符数、单词数,以及出现次数最多的 3 个单词(次数降序、同次数按字典序,格式 词 次数 用逗号加空格连接)。

输入 一行英文文本。

输出 三行:chars=words=top3=...

样例输入
the quick brown fox the lazy dog the end
样例输出
chars=40
words=9
top3=the 3, brown 1, dog 1

💡 提示 切词 → 字典计数 → 排序取前 3 → 用 ", ".join(...) 拼接。

✅ 查看参考答案与解析
text = input()
words = text.split()

freq = {}
for w in words:
    freq[w] = freq.get(w, 0) + 1

top = sorted(freq.items(), key=lambda kv: (-kv[1], kv[0]))[:3]
top_str = ", ".join(f"{w} {c}" for w, c in top)

print(f"chars={len(text)}")
print(f"words={len(words)}")
print(f"top3={top_str}")

解析 这道题把整条 Python 线串起来了:字符串方法、字典、排序、推导式/生成器、f-string。写完它,Python 基础就算过关。

📚 本文概念都在知识大全:

Python · pip 与虚拟环境 · 列表/字典/集合 · 推导式 · f-string · 异常处理 · dataclass · pandas · 模块与包