本章要回答的问题:动手清洗之前,凭什么说"先把食材认全"最重要?拿到一份新数据,怎样在几分钟内判断每一列是什么类型、该用什么盛器来装?列表、字典、集合、数组这些容器各管什么,选错了会怎样?这三个问题的答案,构成了后面七章所有手法的地基。
料理行有句老话:食材没认全就开火,翻车只是时间问题。数据处理同样如此。大量真实事故的根因不在算法,而在最前面那一步——把存成文本的数字当数字算,把含 NaN 的整型列强转 int 崩了整段脚本,把该用字典的查找写成了遍历列表。这些都是"食材验收"没做的账。
本章放在全书最前面,还有一个原因:后续每一章的食谱卡都默认你读得懂报错里的类型名。第 2 章的 to_numeric 为什么要配 errors 参数,第 4 章的 groupby 结果为什么有时是 Series 有时是 DataFrame,这些"为什么"都长在同一块地基上。备料间看着不起眼,但后厨每个人每天都要进来。
对照开篇的几个问题,读完本章你应当能做到:
可考核知识点清单(自测时逐条打勾):type 与 dtype 各自回答什么问题;NaN 属于浮点世界的原因;可变与不可变容器在函数传参时的行为差异;字典按键取值与列表按下标取值的复杂度差别;数组广播的基本直觉;pandas 里 object、int64、float64、datetime64、category 五类 dtype 的常见来历。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 1.1 数据类型与结构 | 食材是什么、新不新鲜 | 一套逐列验收类型的检查动作 |
| 1.2 常用数据结构操作 | 用什么盛器装、怎么取用 | 容器选型对照与数组算术直觉 |
**问:直接学 pandas 不行吗,为什么先认 Python 类型?**因为 pandas 的很多"怪行为"根源在类型系统——整型列混入 NaN 变浮点、文本列点不了数值方法、category 省内存的原理,这些"为什么"都落在 1.1 的六类食材上。跳过这一步,后面的每个报错都像玄学。
**问:列表、字典这些基础真的会用,能跳吗?**可以快读,但别跳过 1.2 的"逐元素算术"与"别名陷阱"。数组逐元素运算直接决定 7.2 广播规则能不能看懂;引用别名则是清洗脚本"改一个动一双"事故的头号来源。
**问:本章需要装什么环境?**Python 与 pandas、NumPy 即可,全部示例在标准 Notebook 里可直接运行;不依赖任何特定版本的新特性,个别涉及弃用参数的地方(如 fillna 的 method)正文里都给了新旧两种写法。
备料合格后,下一章进择菜间:缺失值、异常值、重复值、类型矫正与标准化,是清洗工序的主菜。本章 1.1 讲的类型知识会直接决定 2.4(类型转换)里每个参数怎么选;1.2 的容器直觉则会在 6.1(函数式三件套)里反复兑现。