15.1 数据处理与可视化:电子表格¶
内容梗概¶
本课是"数据处理与可视化"章节的第一课,从日常最常见的数据载体——表格——切入,讲解用 Python 处理表格数据的两种轻量级方式:一是用内置的 csv 库处理 CSV 文件,二是用第三方库 openpyxl 处理 Excel(.xlsx)文件。老师强调本章节讲得很浅,主要目的是练习 Python 的用法和养成查官方文档的习惯,真正的数据分析还有大量内容要学。课上演示了读取 CSV 的两种写法(csv.reader 和 csv.DictReader)以及用 openpyxl 读取 Excel 的基本流程。
知识点详解¶
数据处理与表格(约 00:00 - 02:00)¶
- 数据处理最常见的形式是表格:日常工作中的 Excel、关系型数据库中的 table 本质上都是二维表格(不讨论图数据库、NoSQL)。
- 本课程只讲最基本的库和用法:
pandas处理表格、matplotlib画图,不涉及更深入的数据处理算法和丰富的可视化库。 - 两种典型场景:学过 Python 但非数据分析专业的人,想自动处理一批表格(查错、自动计算);最直观的两种方式是处理 CSV 格式和处理 Excel 格式。
CSV 格式与内置 csv 库(约 02:20 - 05:30)¶
- CSV 本质是**纯文本文件**,与 txt 一样,用 VSCode 打开能看到内容;以特定字符作为分隔符,默认是逗号分隔(如
id,name,age一行、1,小董,18一行)。 - CSV 的第一行通常是表头,表明每一列的含义;也存在没有表头的 CSV,但那样需要自己猜测每列含义,一般应该有表头。
- Python 内置
csv库,无需pip install即可处理 CSV。 - 处理 Excel 文件的第三方库有多个:本课选用
openpyxl(open + py + xl,开源的 Python Excel 库);此外还有xlrd(Read)、xlwt(Write)等。
用 csv.reader 读取 CSV(约 11:00 - 18:00)¶
- 官方文档示例的读法:
import csv
with open('x.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
- 注意:用
open()打开 CSV 文件时必须传newline=''(空字符串),这是文档的硬性要求。顺带讲解了newline参数与换行符的关系:Windows 文本换行符是\r\n(回车+换行),Linux 下是\n,VSCode 右下角可查看/切换当前文件的换行符类型。 csv.reader的分隔符等参数在默认情况下(逗号分隔)不需要传。- 迭代 reader 对象得到的每一行
row是一个**列表**(老师课上先口误说成元组,随后更正)。 - CSV 中逗号后的空格不会被自动忽略,需要自行处理,两种方法:
str.replace(' ', '')把空格替换为空字符;str.strip()去掉首尾空白。- 该写法的缺陷:表头不会自动关联到数据,拿到的是"列表的列表",想按列名访问数据要手动处理,很费劲。
用 csv.DictReader 读取(约 19:00 - 24:00)¶
- 文档中的
class csv.DictReader:自动把第一行表头作为 key,每行数据组织成 key-value 形式。 - 版本差异:Python 3.8 起 DictReader 返回的行是
dict类型;3.7 及以前返回的是 OrderedDict。老师为此把 Pipfile 中的python_version改为 3.8,再用pipenv shell进入 3.8 虚拟环境演示。 - 用 DictReader 后可以方便地按列名取数,如
row['age'],配合循环可单独打印某一列(如所有人的年龄)。 - 数据文件中若引号、空格影响键名,最简单的办法是在 VSCode 里 Ctrl+H 全文替换掉,不影响读取。
- 应用场景:上节课爬虫爬下来的数据存在 CSV 里,用这套逻辑读进 Python 就是"字典组成的列表",每个字典对应一行,后续处理很方便。
用 openpyxl 处理 Excel(约 24:40 - 32:00)¶
- CSV 文件在 Windows 上默认用 Excel 打开,可以在 Excel 中"另存为"得到
.xlsx文件(Excel 2010 以后的格式)。 - 安装:
pipenv install openpyxl,然后pipenv shell进入环境。 - 读取 Excel 的基本流程(约 27:30):
from openpyxl import load_workbook
wb = load_workbook('data.xlsx') # workbook 是整个工作簿
ws = wb.active # worksheet,获取当前激活的表单
for row in ws.values: # values 属性可遍历所有行
print(row) # 每行是一个元组
- 一个 Excel 文件可含多个子表单(worksheet),
wb.active取当前显示的那个。 - 缺陷与
csv.reader类似:第一行表头不会自动变成字典形式,需要可手动转换。 - 写 Excel:文档示例是
Workbook()创建新工作簿、取激活表单、给单元格赋值(如ws['A1'] = 42)、append添加行、最后wb.save('xxx.xlsx')保存。 - 老师演示了"第一次用某库如何上手"的过程:打开官方文档 → 看示例代码判断是读还是写 → 在文档目录中找 "Loading from a file" 等对应章节 → 模仿示例写代码。反复强调**养成看官方文档的习惯**,优于看翻译不全的中文博客。
学以致用(约 32:00 - 33:16)¶
- 接地气的例子:学习委员拿到 Excel 成绩单,用 Python 读进来自动计算,甚至给每个同学单独发邮件。老师当班主任时班级的中测成绩就是这样用 Python 算的。
- 结课寄语:遇到生活中重复的工作要动手写代码,不要白学了 Python。
示例与演示¶
- 演示 1(CSV 读取):下载课件提供的示例 CSV(18 条数据 + 表头,含 name、sex、age、身高、体重等列),用
csv.reader逐行打印列表;再用嵌套循环演示replace与strip两种去空格方法(每个元素打印两遍对比效果)。 - 演示 2(DictReader):切换 Pipfile 到 Python 3.8 环境,用
csv.DictReader打印每行字典({'name': 'Alex', 'sex': 'M', 'age': '41', ...}),并演示按键名row['age']单独输出整列;遇到键名带引号/空格的问题时用全文替换清洗数据。 - 演示 3(Excel 读取):把 CSV 另存为 xlsx(课上还遇到一次文件损坏重新保存),
pipenv install openpyxl后用load_workbook+wb.active+ws.values打印所有行(元组形式)。 - 演示 4(文档导读):现场演示如何通过 openpyxl 官方文档从"创建新表格"的示例推断出写文件流程,再从目录找到 "Loading from a file" 学会读文件。
重点与难点¶
open(csvfile, newline='')中newline=''是文档硬性要求,容易遗漏。csv.reader读出的行是列表,csv.DictReader读出的行是字典(3.8+);按列名处理数据时后者方便得多。- CSV 中逗号后的空格、引号会成为数据内容的一部分,需要清洗(
replace/strip或直接全文替换)。 - 不同操作系统文本文件换行符不同(Windows
\r\nvs Linux\n),与newline参数相关。 - Pipfile 中可指定
python_version(如 3.8),pipenv shell进入对应环境;库的版本差异(DictReader 返回类型)要留意文档备注。 - 学习方法层面:不直接给代码,而是反复强化"查官方文档 → 模仿示例"的习惯。
关联内容¶
- 承接上一章**爬虫**课程:爬取的数据存为 CSV,本课解决"爬下来之后怎么读、怎么处理"的问题。
- 与 Web 开发章节逻辑类似:都是以浅显的应用场景练习 Python 用法。
- 为后续课程铺垫:本课的 csv/openpyxl 是轻量方案;下一课(15.2)讲更强大的
pandas,再往后是matplotlib可视化(15.3)和综合实例(15.4)。 - 前置知识:文件读写(
open)、列表/字典/元组、循环、pipenv虚拟环境管理(第 10 章)。