一、为什么一到数据处理,大家几乎都会提 Pandas
如果你前面已经学过列表、字典、NumPy,那么你会慢慢发现一个问题:
这些工具都能处理数据,但一旦数据长得像表格,事情就会开始变麻烦。
比如你有一份销售表:
日期、商品、销量、单价、门店
你想做这些操作:
筛出某个门店的数据 找出销量大于 100 的记录 统计每个商品的总销量 按日期排序 把缺失值补上 导出成新的 Excel 或 CSV
如果只靠列表套字典,当然不是不能做,但代码通常会越来越碎,越来越难维护。 而 Pandas 就是专门为这种表格型数据而生的。
它最大的价值,不只是快,而是特别适合处理真实世界里最常见的数据形态:
表格 清单 报表 日志 CSV Excel 数据库查询结果
所以很多人一学数据分析、数据清洗、自动化办公,都会很快接触到 Pandas。 不是因为它听起来高级,而是因为它真的很实用。
二、Pandas 到底是什么
Pandas 是 Python 里最常用的数据分析与表格处理库之一。
你可以先把它理解成:
一个专门用来处理二维表格数据的强大工具库。
它特别擅长做这些事:
读取表格文件 查看数据 筛选数据 清洗脏数据 统计分析 按条件过滤 分组汇总 排序 补空值 导出结果
如果说 NumPy 更像“高效数值数组工具”,那 Pandas 更像“表格数据处理专家”。
两者不是对立关系,而是经常配合使用。 很多时候,Pandas 底层就依赖 NumPy 来完成高效计算。
三、为什么 Pandas 这么受欢迎
根本原因很简单:
它让表格处理这件事,从麻烦变得顺手。
举个很现实的对比。
你要从一堆销售记录里筛出销量大于 100 的数据。 如果你用纯 Python 循环,往往要一条条判断。 如果你用 Pandas,很多时候一行就能完成。
你要统计每一列的平均值。 你要按某一列排序。 你要找空值。 你要删掉重复行。 这些动作在 Pandas 里都非常自然。
所以 Pandas 的强,不只是功能多,而是它特别符合表格数据处理的思维方式。 你想做什么,它往往都有现成、清晰、可读性高的写法。
四、先安装 Pandas
如果当前环境还没有安装,可以先装:
python -m pip install pandas
导入时,最常见的写法是:
import pandas as pd
和 NumPy 用 np 一样,Pandas 几乎约定俗成都写成 pd。 以后你看到:
import pandas as pd
要立刻反应过来,这就是在用 Pandas。
五、Pandas 里最重要的两个对象
入门阶段,你先记住两个名字就够了:
Series DataFrame
1. Series
它可以理解成“带索引的一维数据”。
有点像一列数据。 比如一列成绩、一列商品价格、一列姓名。
2. DataFrame
它可以理解成“带行列标签的二维表格”。
这才是 Pandas 最常用、最核心的对象。 你可以把它想成 Excel 里的一张工作表,或者数据库查询出来的一张结果表。
这一章是 Pandas 入门,所以你先知道有这两个对象。 后面下一章会更系统地讲 DataFrame。
六、先看一个最简单的 Series
import pandas as pds = pd.Series([88, 92, 75, 60])print(s)
输出大致会像这样:
088192275360dtype: int64
左边这一列是索引。 右边这一列是数据。
你也可以自己指定索引:
import pandas as pds = pd.Series([88, 92, 75], index=["张三", "李四", "王五"])print(s)
输出大致是:
张三 88李四 92王五 75dtype: int64
这时候它就不像普通列表了。 因为它不仅有值,还有标签。
你可以这样取值:
print(s["李四"])
所以 Series 可以看成:
列表 + 索引标签 或者 字典风格的一维数据结构
七、真正的主角:DataFrame
Pandas 最常用的其实不是 Series,而是 DataFrame。
先看一个最基础的创建方式:
import pandas as pddata = {"姓名": ["张三", "李四", "王五"],"年龄": [20, 22, 21],"成绩": [88, 92, 75]}df = pd.DataFrame(data)print(df)
输出大致是:
姓名 年龄 成绩0 张三 20881 李四 22922 王五 2175
你会发现,这已经非常像一张表了。
列名就是:
姓名 年龄 成绩
左边的 0、1、2 是默认行索引。
这就是 Pandas 最迷人的地方之一。 你拿到一份结构化数据后,很快就能把它变成一张可操作的表。
八、为什么 DataFrame 比列表套字典更适合表格处理
先想象不用 Pandas 时,你可能会这样存数据:
students = [ {"姓名": "张三", "年龄": 20, "成绩": 88}, {"姓名": "李四", "年龄": 22, "成绩": 92}, {"姓名": "王五", "年龄": 21, "成绩": 75}]
这当然没问题。 但如果你想:
取出整列成绩 找出成绩大于 80 的学生 按年龄排序 增加一列是否及格 导出成 CSV
代码就会越来越长。
而 DataFrame 天然就是表格结构,所以这些操作会变得非常顺手。 这就是为什么只要数据是“按行按列组织的”,Pandas 往往就比原生结构更舒服。
九、DataFrame 的基本信息先怎么看
拿到一张表后,第一件事通常不是立刻分析,而是先“认识它”。
比如:
import pandas as pddata = {"姓名": ["张三", "李四", "王五"],"年龄": [20, 22, 21],"成绩": [88, 92, 75]}df = pd.DataFrame(data)
先看前几行:
print(df.head())
默认看前 5 行。 数据量大时非常有用。
看后几行:
print(df.tail())
看行列形状:
print(df.shape)
输出大致是:
(3, 3)
表示 3 行 3 列。
看列名:
print(df.columns)
看索引:
print(df.index)
看每列的数据类型:
print(df.dtypes)
这些都是刚接触一份表格时特别实用的操作。 你可以把它理解成先“摸清这张表长什么样”。
十、info 和 describe 是入门阶段非常值钱的两个方法
1. info()
它能快速告诉你:
一共有多少行 每列有没有空值 每列是什么类型 整体内存占用大概怎样
print(df.info())
你会看到类似这样的信息:
列名 非空数量 数据类型
这对判断脏数据特别有帮助。
2. describe()
它会对数值列做统计摘要,比如:
计数 平均值 标准差 最小值 四分位数 最大值
print(df.describe())
如果你拿到的是销售数据、成绩数据、价格数据,这个方法能非常快地帮你对整体分布有个感觉。
所以以后拿到一份新表格,建议先来一套:
head()info()describe()
很多问题,一眼就能先看出个大概。
十一、怎么取一列数据
DataFrame 本质上是一张表。 取一列,是最常见操作之一。
比如:
print(df["成绩"])
输出会是一个 Series。
也就是说,DataFrame 取出单列后,通常就变成一维结构了。
你也可以一次取多列:
print(df[["姓名", "成绩"]])
注意这里是双层中括号。 因为你传进去的是“列名列表”。
单列是 Series。 多列还是 DataFrame。
这点特别重要,后面很多操作都和这个差别有关。
十二、怎么新增一列
这也是 Pandas 非常好用的地方。
比如给学生新增一列是否及格:
df["是否及格"] = df["成绩"] >= 60print(df)
输出大致会多出一列:
姓名 年龄 成绩 是否及格0 张三 2088True1 李四 2292True2 王五 2175True
再比如加一列总评等级:
df["等级"] = ["良好", "优秀", "中等"]print(df)
你会发现,Pandas 特别适合在表格上做“加工”。 增加一列、修改一列,思路都很自然。
十三、按条件筛选数据,是 Pandas 最常用的操作之一
比如筛出成绩大于 80 的学生:
print(df[df["成绩"] > 80])
这行代码很值得你体会。
df["成绩"] > 80会先得到一个布尔序列:
True True False
然后 df[...] 再根据这个条件把符合的行筛出来。
这就是 Pandas 特别强的一点:
你可以像写条件一样,直接筛表。
再比如筛出年龄大于 20 的学生:
print(df[df["年龄"] > 20])
多个条件一起筛:
print(df[(df["成绩"] > 80) & (df["年龄"] > 20)])
注意这里要用 &,不能用 and。 这个规则和 NumPy 很像。
如果你想筛出“成绩大于 90 或年龄小于 21”的:
print(df[(df["成绩"] > 90) | (df["年龄"] < 21)])
所以以后你处理表格时,一定要熟悉这种写法。 它是 Pandas 入门后的高频动作。
十四、排序也非常简单
按成绩升序:
print(df.sort_values("成绩"))
按成绩降序:
print(df.sort_values("成绩", ascending=False))
按多列排序:
print(df.sort_values(["年龄", "成绩"], ascending=[True, False]))
这类需求在真实工作里非常常见。 比如:
按销售额排序 按日期排序 按门店和商品双重排序 按成绩排名
如果没有 Pandas,这些操作通常就得自己写排序逻辑。 而 Pandas 已经把它们做得很顺手了。
十五、读取文件,是 Pandas 真正进入实战的开始
很多时候你不是手写数据,而是从文件里读。
最常见的是 CSV。
import pandas as pddf = pd.read_csv("data.csv")print(df.head())
如果是 Excel:
df = pd.read_excel("data.xlsx")print(df.head())
这两句有多重要。
因为现实里绝大多数表格数据,都是从文件来的。 不是你在代码里手敲,而是外部已经有现成的数据源。
所以 Pandas 的强,不只是能创建表,而是能非常顺畅地把外部表格读进来再处理。
当然,读取 Excel 往往还需要配合安装相关依赖,比如 openpyxl。 这个你后面实战中会慢慢熟悉。
十六、导出结果同样非常常见
你处理完数据,通常还要保存回去。
导出 CSV:
df.to_csv("result.csv", index=False)
导出 Excel:
df.to_excel("result.xlsx", index=False)
这里的 index=False 很常见。 它表示导出时不要把左边那列索引也写进去。
因为很多时候,那只是程序内部默认编号,不一定是你想给别人看的正式数据列。
所以 Pandas 的一个非常完整的工作流其实是:
读进来 看一看 筛一筛 改一改 算一算 排一排 再导出去
这就是它为什么在办公自动化和数据处理里这么常见。
十七、缺失值,是表格数据处理中绕不开的问题
真实数据很少像练习题那样完美。 经常会有空白、缺漏、没填、异常值。
看一个例子:
import pandas as pddata = {"姓名": ["张三", "李四", "王五"],"年龄": [20, None, 21],"成绩": [88, 92, None]}df = pd.DataFrame(data)print(df)
你会看到有些位置显示成 NaN。 这表示缺失值。
先判断哪些位置缺失:
print(df.isnull())
统计每列缺失数量:
print(df.isnull().sum())
删除含缺失值的行:
print(df.dropna())
把缺失值补成 0:
print(df.fillna(0))
把年龄缺失值补成平均年龄:
df["年龄"] = df["年龄"].fillna(df["年龄"].mean())print(df)
这部分非常实用。 因为现实数据处理,很多时间都不是花在“炫技分析”,而是花在清洗脏数据。
十八、简单统计,Pandas 非常擅长
比如求成绩平均值:
print(df["成绩"].mean())
求最大值:
print(df["成绩"].max())
求最小值:
print(df["成绩"].min())
求总和:
print(df["成绩"].sum())
统计有多少人:
print(df["姓名"].count())
如果是数值列很多的一张表,直接:
print(df.mean(numeric_only=True))
就能看到各数值列的平均值。
所以从“表格”转成“统计结果”,Pandas 这条路非常顺。
十九、唯一值、去重,也是很高频的需求
比如看成绩这一列有哪些不同值:
print(df["成绩"].unique())
看有多少种不同成绩:
print(df["成绩"].nunique())
去掉重复行:
print(df.drop_duplicates())
按某列去重:
print(df.drop_duplicates(subset=["姓名"]))
现实里你做订单数据、用户数据、日志数据时,这些动作会非常常见。 而 Pandas 已经把它们封装得非常直接了。
二十、一个小案例:销售表快速处理
假设有这样一张销售表:
import pandas as pddata = {"商品": ["苹果", "香蕉", "苹果", "橙子", "香蕉"],"销量": [100, 80, 120, 60, 90],"单价": [5, 3, 5, 4, 3]}df = pd.DataFrame(data)print(df)
先新增一列销售额:
df["销售额"] = df["销量"] * df["单价"]print(df)
筛出销量大于 80 的记录:
print(df[df["销量"] > 80])
按销售额降序排序:
print(df.sort_values("销售额", ascending=False))
统计总销售额:
print(df["销售额"].sum())
看每列平均值:
print(df.mean(numeric_only=True))
你会发现,哪怕现在还没学分组聚合,Pandas 已经能让很多常见表格任务变得相当轻松。
二十一、Pandas 为什么特别适合办公和数据分析
因为现实里的很多数据,天然就是二维表。
Excel 表 CSV 表 数据库查询结果 接口返回整理后的表 日志抽取后的结构化数据
这些数据最常做的事,也不是特别复杂的数学,而是:
选列 选行 过滤 排序 补值 去重 统计 导出
而 Pandas 对这些动作几乎是原生友好的。 所以它不是一个“只适合算法工程师”的工具,反而非常适合:
数据分析 运营分析 自动化办公 报表处理 爬虫结果整理 日志清洗 初级 BI 脚本
也正因为这样,它的使用人群特别广。
二十二、初学 Pandas 最容易踩的几个坑
1. 把 Series 和 DataFrame 混了
取一列出来,很多时候就不是表了,而是一维结构。 后面方法行为可能不一样。
2. 条件筛选时用 and 和 or
在 Pandas 里,多条件通常用 & 和 |,并且每个条件要加括号。
3. 忘记数据类型问题
比如数字列读进来却变成字符串,后面算平均值就会出问题。
4. 对原数据和新数据分不清
有些操作会返回新对象,有些可以原地改。 刚入门时要多观察输出,别想当然。
5. 一上来就学很复杂的功能
其实先把读文件、看数据、选列、过滤、排序、缺失值处理学熟,已经能解决很多实际问题。
二十三、这一章学到什么程度算入门了
这一章结束后,如果你能做到这些,就已经很不错:
知道 Pandas 是做什么的 知道 Series 和 DataFrame 是什么 会创建简单 DataFrame 会看 head()、info()、describe()会取列、加列 会按条件筛选 会排序 会处理简单缺失值 会读 CSV、Excel 会导出结果
这已经足够支撑你进入下一章,去真正理解 DataFrame 的结构和思维方式。
二十四、本章要点整理
Pandas 是 Python 里最重要的表格数据处理库之一。 它特别适合处理 CSV、Excel、报表、日志、清单这类二维结构数据。 Pandas 最核心的两个对象是 Series 和 DataFrame,其中 DataFrame 最常用。 常见入门操作包括查看数据、取列、加列、条件筛选、排序、统计、缺失值处理。read_csv() 和 read_excel() 是读取外部表格数据的高频入口。to_csv() 和 to_excel() 常用于导出处理结果。 Pandas 强的地方,不只是功能多,而是特别符合表格处理的思维方式。 学会 Pandas,很多原本要写大量循环的表格操作都会变得更直接、更清晰。