课程库 › AI 主线 › pandas 数据处理 › 第 2 课
DataFrame 直觉 —— 会呼吸的 Excel
普通课约 55 分钟
本课导读
pandas 的世界只有一个中心:DataFrame——一张带行标签、列标签的二维表。你可以把它理解成"会呼吸的 Excel 表":长得像 Excel,但每个操作都是代码,因此可复现、可批量、可自动化。本课建立三个直觉:DataFrame 长什么样、它和你学过的"字典的列表"什么关系、一列(Series)单独拿出来是什么。有了直觉,后面六课全是顺水推舟。预计 55 分钟。
说明
提醒:本单元代码块首次运行要加载 pandas(约 10-20 秒,之后流畅)。建议同时在本地 Notebook 跟练——代码一字不差通用。
从"字典的列表"到 DataFrame
U1.1 到 U1.3 反复出现的"数据标准形状",pandas 一口就能吞下:
看输出:列标签(name/dept/salary)来自字典的键,行标签(左侧的 0/1/2,叫索引 index)自动编号。恭喜——你过去五个单元跟"字典的列表"搏斗的所有经验,现在都有了表格形态。
另一种常见创建方式,"字典的列表"换成"列表的字典"(按列给数据):
两种写法产出完全一样。用陌生类三问打量它(U1.2 的功夫):怎么造——pd.DataFrame(数据);有什么——shape、columns、index 等属性;会什么——接下来六课全是它的方法。
一列拿出来:Series
方括号取一列,得到的东西叫 Series(序列)——带标签的一维数据,DataFrame 的基本零件:
对照记忆:DataFrame 之于 Series,就像"整张表"之于"一列"。取一列是 Series,取多列还是 DataFrame(下下课细讲选取)。.mean()/.max()/.sum() 这些统计方法直接长在列上——不用再写 for 循环累加了。
pandas 的第一个魔法:整列运算
这是 pandas 与手写循环的分水岭。给全员涨薪 10%:
拆解这个魔法:
df["salary"] * 1.1——一列乘一个数 = 每个元素都乘,pandas 自动帮你"循环"(术语叫向量化,记住现象即可)df["新列名"] = ...——不存在的列,赋值即创建(眼熟吗?字典的脾气,它继承了)- 心法转变:从"逐个处理"到"整列思考"——U1.1 推导式帮你把循环压成一行,pandas 更进一步,让你连"循环"这个概念都不用想
提示
类比记忆:手写循环是一个个工人搬砖,整列运算是传送带整批过机器。写 pandas 时先问自己:"这个操作能不能对整列说一次就完事?"——十有八九能。看到 pandas 代码里出现 for 循环,多半是还没换上 pandas 脑子。
会呼吸的证据:和 Excel 的对照
| 你在 Excel 里做的 | pandas 里的等价物 |
|---|---|
| 打开表格看两眼 | df.head() |
| 在 D 列写公式 =B2*1.1 再下拉 | df["D"] = df["B"] * 1.1(不用下拉!) |
| 状态栏看平均值/求和 | df["列"].mean() / .sum() |
| 手动重做昨天的操作 | 代码重跑一遍,一字不差 |
最后一行是本质区别:Excel 的操作是手艺(做完就散),pandas 的操作是代码(可保存、可重放、可交给别人审查)。数据量上 Excel 十万行就开始喘,pandas 百万行如常——这就是"会呼吸"。
✍️ 练习
练习 1:建表初体验
用"列表的字典"创建一张商品表:三件商品(键盘 299 / 鼠标 89 / 显示器 1599),列为 product 和 price。打印整表、形状、price 列的平均值。
✅ 参考答案
import pandas as pd
df = pd.DataFrame({
"product": ["键盘", "鼠标", "显示器"],
"price": [299, 89, 1599],
})
print(df)
print(df.shape)
print(df["price"].mean())
练习 2:整列运算
给商品表加两列:discounted(八折价)和 with_tax(八折价再加 6% 税)。全程不许写 for。
✅ 参考答案
import pandas as pd
df = pd.DataFrame({
"product": ["键盘", "鼠标", "显示器"],
"price": [299, 89, 1599],
})
df["discounted"] = df["price"] * 0.8
df["with_tax"] = df["discounted"] * 1.06
print(df)
新列还能基于刚创建的新列继续算——传送带可以串联。
练习 3:新旧脑子对照(挑战)
下面是 U1.1 风格的"循环脑"代码。用"整列脑"重写:pandas 三行以内完成同样的事(建表、算业绩达标标记、打印达标人数)。
✅ 参考答案
import pandas as pd
df = pd.DataFrame({"name": ["小雨", "阿杰", "丽丽", "老王"],
"sales": [60000, 45000, 80000, 52000]})
print(f'达标 {(df["sales"] >= 50000).sum()} 人')
df["sales"] >= 50000 对整列做比较,得到一列 True/False;对它 .sum() 时 True 当 1 数——"条件计数"一行搞定。这列 True/False 下下课还有大用(条件筛选)。
📝 随堂测验
1. DataFrame 最贴切的一句话描述是?
2. df["salary"] 取出的东西是?
3. df["new"] = df["price"] * 0.8 这行做了什么?
4. “看到 pandas 代码里有 for 循环要警惕”,背后的心法是?
5. (df["sales"] >= 50000).sum() 能算出达标人数,原理是?
本课小结
- DataFrame = 行标签 + 列标签的二维表;"字典的列表"一口吞成表,过往功夫全数继承
- 单列是 Series,统计方法(mean/sum/max)直接长在列上
- 第一魔法整列运算:列与数、列与列直接算,新列赋值即创建——从"逐个处理"换成"整列思考"
- 与 Excel 的本质差:操作即代码,可复现、可批量、百万行不喘
下一课对接真实世界:read_csv 读入外部数据,再用 head/info/describe 三板斧给它做"入库体检"。
划选正文任意文字可高亮、批注或加入复习卡
讨论
载入中…