4-1 Pandas核心容器与数据读取
📌 一、 课程导入(10 分钟)
- 真实场景痛点:NumPy 遇到“异构表格”怎么办?
- 上一章学习的 NumPy 虽然算得快,但要求所有数据必须是同一种纯数字类型(如全 float),且只有无意义的行列序号(0, 1, 2…)。
- 现实中的数据表格(如学生成绩单、二手房数据)既有文本(姓名、城市),又有数字(年龄、价格),且带有表头(“面积”、“售价”)。
- 数据分析神器 Pandas 闪亮登场
- Pandas = Panel Data(面板数据),底层建立在 NumPy 之上。
- 核心优势:给数组带上了“行标签(Index)”和“列标签(Columns)”,完美对标 Excel 表格形态。
- 👨🏫 教师活动:展示一张真实的 Excel 学生数据表,对比纯 NumPy 矩阵与 Pandas 表格的视觉差异;用“带标签的超强 Excel”比喻讲解 Pandas 的定位。
- 🧑🎓 学生活动:观察对比,思考如果用 NumPy 存储“姓名+年龄+成绩”会遇到什么类型转换问题,体会 Pandas 引入的必要性。
从现实业务数据“多类型混合、含标题栏”的痛点出发,自然引出 Pandas,帮助学生理解 NumPy 与 Pandas 的分工:NumPy 搞底层矩阵计算,Pandas 搞上层表格数据分析。
📖 二、 解决问题过程(一):数据的“进与出”——读取外部真实数据(30 分钟)
打破纯理论讲造数据的旧套路,直接从读取磁盘上的真实文件开始,让学生第一时间接触真实数据集。
1. 核心读取函数对比
| 读取函数 | 常见后缀名 | 核心注意参数 | 典型场景 |
|---|---|---|---|
pd.read_csv() |
.csv, .txt, .data |
sep (分隔符), encoding (编码) |
大数据量、通用文本分隔数据 |
pd.read_excel() |
.xlsx, .xls |
sheet_name (工作表名) |
办公软件生成的报表 |
2. 读取排错三大坑(教师现场示范报错)
-
坑 1:编码错误 (
UnicodeDecodeError) -
原因:Windows 中文环境下保存的 CSV 经常是
GBK或ANSI编码。 -
解法:指定参数
encoding='gbk'或encoding='utf-8'。 -
坑 2:分隔符不是逗号 (
sep) -
原因:某些文本文件(如
.txt)使用制表符\t或空格分隔。 -
解法:
pd.read_csv('data.txt', sep='\t')。 -
坑 3:路径找不到 (
FileNotFoundError) -
原因:相对路径不正确。
- 👨🏫 教师活动:故意演示读取一个 GBK 编码的 CSV 文件触发报错,引导学生看懂报错信息并加入
encoding='gbk'解决;演示to_csv(index=False)中index=False参数的作用。 - 🧑🎓 学生活动:在 Jupyter 中运行教师发放的练习文件,亲自排查一次编码报错,尝试将读取的数据重新导出保存。
将原本放在后面的“数据读取”前置,让后续所有知识点的学习都建立在真实数据表格之上;提前把编码报错等机房高频“绊脚石”解决掉,建立工程排错能力。
💻 三、 解决问题过程(二):探究 Pandas 核心容器与结构(30 分钟)
读取数据后,我们需要核查载入的数据到底是什么结构。
1. 两大数据容器与索引对象
Series(一维):带标签的一维同质数组(类似表格中的“单列数据”)。DataFrame(二维):带行标签和列标签的二维异构表格(由多个Series共享同一套Index组合而成)。Index(索引对象):存储行标签或列标签的容器,具有不可变性(Immutable),确保数据对齐不乱套。
2. 数据的“体检报告”属性与函数
读取数据后,第一时间调用以下属性和函数进行概览:
- **
df.head(n)/df.tail(n)**:查看前/后 n 行数据(默认 5 行)。 df.shape:查看数据形状(行数, 列数)。df.dtypes:查看每一列的数据类型(注:object代表字符串/混合类型)。df.info():一键查看总行数、列名、非空值数量及内存占用(极其重要!)。
- 👨🏫 教师活动:结合动画PPT和板书,画出 DataFrame 与 Series 的立体结构关系;带领学生运行
df.info(),逐行解读返回的信息。 - 🧑🎓 学生活动:跟练代码,尝试提取表格中的不同列,观察提取单列与提取多列时返回的数据类型(
SeriesvsDataFrame)有何不同。
通过“体检”这一直观概念,让学生掌握查看数据全貌的标准动作;厘清 Series 与 DataFrame 的包含关系,打牢数据提取的维度认知。
✍️ 四、 解决问题过程(三):充分课堂练习与巩固(20 分钟)
📝 五、 课堂小结(5 分钟)
flowchart LR
root["📊 4-1 Pandas 核心容器与数据读取"]
subgraph C1["📥 1. 数据进与出 (IO)"]
direction TB
A1["pd.read_csv(sep, encoding)"]
A2["pd.read_excel(sheet_name)"]
A3["to_csv(index=False) 保存"]
end
subgraph C2["📦 2. 核心数据容器"]
direction TB
B1["Series: 带索引一维数组"]
B2["DataFrame: 带行列标签二维表格"]
B3["Index: 不可变标签容器"]
end
subgraph C3["🔍 3. 结构体检属性"]
direction TB
C1_node["df.shape / df.dtypes"]
C2_node["df.head() / df.tail()"]
C3_node["df.info() (全面诊断)"]
end
root --> C1
root --> C2
root --> C3
%% 自定义主题色彩美化
style root fill:#4b6cb7,stroke:#253b6e,color:#fff,stroke-width:2px,rx:8px,ry:8px
style C1 fill:#e3f2fd,stroke:#2196f3,stroke-width:1px
style C2 fill:#fff3e0,stroke:#ff9800,stroke-width:1px
style C3 fill:#e8f5e9,stroke:#4caf50,stroke-width:1px