资讯动态

2小时快速入门Pandas:从数据清洗到分组聚合实战

发布时间:2026/8/30 4:20:17 来源:尧图企业网站定制
这次我们来看一条 2 小时快速入门 Pandas 数据分析的学习路径。Pandas 是 Python 生态里最常用的表格处理库不管你是做 Excel 替代、数据清洗、报表统计还是要为机器学习准备特征基本都会用到它。它最大的优势是不需要 GPU不需要额外算力只要电脑能跑 Python就能处理从几千行到几百万行的表格数据。核心数据结构只有两个Series 和 DataFrame所有功能都是围绕它们展开的。这篇文章会按 2 小时时间块来设计先装环境再花一段时间熟悉数据结构和数据读取然后集中练数据清洗接着做分组聚合和多表合并最后用一个综合案例把流程串起来。每个阶段都有可复制的代码和判断标准适合刚接触 Python 的小白也适合想从 Excel 转向 Python 的办公人员。如果你已经会 numpy 或 matplotlib本内容可以直接做查漏补缺。1. Pandas 核心能力速览能力项说明项目类型Python 数据分析库核心数据结构Series一维序列、DataFrame二维表格常用数据源CSV、Excel、JSON、SQL 数据库、剪贴板主要功能数据读取、查看、筛选、排序、清洗、分组聚合、多表合并、统计摘要、导出硬件要求普通 CPU 电脑可运行无需 GPU内存占用跟随数据量变化启动方式在 Python 脚本或 Jupyter Notebook 中import pandas as pdAPI 能力以 Python API 形式提供可封装到 Flask/FastAPI 服务批量任务支持对多个文件循环处理适合自动化报表学习门槛低适合 Python 基础薄弱的小白Pandas 的核心不是“做图表”而是“处理表格数据”。它的擅长区域是把杂乱数据变成规整数据再用聚合统计回答业务问题。很多数据分析教程会把 Pandas 和 Excel 对比本质上是两件事Excel 靠手工点击Pandas 靠代码批量执行。同样一份几千行的销售数据Excel 做透视表需要几步操作Pandas 用一行groupby加agg就能完成而且可以重复执行。所以在正式开始前你要先建立一条认知Pandas 的学习不是背 API而是记住“数据结构 操作套路”。数据结构是 Series 和 DataFrame操作套路无非是读取、查看、清洗、筛选、聚合、合并、导出。把这七步练熟2 小时足够做一份合格的数据分析入门练习。2. 适用场景与学习边界Pandas 最适合这么几类场景课程作业和实验报告、商业数据分析的初期清洗、金融风控中的规则计算、报表自动化、以及机器学习建模前的特征工程。比如你手头有一份带有空值的订单明细需要把金额字段转成数值类型按地区汇总销售额最后输出一张表这就是 Pandas 的标准工作流。它能把重复性的 Excel 操作变成可复用的脚本所以办公自动化和数据运营岗位基本天天都在用。但 Pandas 也有明确边界。它不是分布式计算框架默认情况下所有数据都要先加载到内存里。单机处理几十 MB 到几个 GB 的表格通常没问题但如果是几十 GB 的日志或大规模集群数据优先考虑 Dask、Spark 这类分布式方案。还有一种常见场景是数据量不大但列特别多这种情况需要关注内存占用尽量只读取需要的列。Pandas 可以处理 parquet、feather 等压缩格式也能通过 numpy 实现很多底层计算但如果你想完全替代 Spark 的分布式能力这不现实。使用数据时一定要注意合规边界。不要随意处理来源不明、包含个人隐私或未经授权的真实数据。如果是公司内部数据或客服信息先确认是否有权使用、是否需要脱敏。教程中建议用模拟数据或公开数据集练习涉及人脸、电话、地址、身份证号等敏感字段的样本绝不能直接外传。3. 环境准备与前置条件Pandas 是一个 Python 库所以先要有一个可用的 Python 环境。Windows、macOS、Linux 都可以建议使用 Python 3.9 及以上版本。安装最直接的方式是 pippip install pandas jupyter matplotlib如果你只需要 Pandas单独安装也可以pip install pandas安装完成后在 Python 脚本或 Jupyter Notebook 里验证import pandas as pd print(pd.__version__)如果能正常输出版本号环境就算通了。一般来说pandas 2.x 版本对 Python 3.9 以上的支持都比较稳定实际版本对应关系以官方文档为准。个人强烈建议配合 Jupyter Notebook 学习。Pandas 数据分析讲究“边写边看”Jupyter 可以让你每次运行后直接看到表格效果比在脚本里print高效得多。启动方式jupyter notebook启动后浏览器会打开 Notebook 页面新建一个 Python 3 内核就可以写代码了。如果你更喜欢 IDEVSCode 安装 Python 扩展后也可以直接运行.ipynb文件体验很接近。如果安装速度很慢可以换国内镜像源pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple这里需要注意不要同时混用多个 Python 环境。建议用 Anaconda 虚拟环境或 Python 自带的 venv 隔离项目依赖避免后面安装其他库时出现版本冲突。完整的检查清单如下Python 版本 3.9能运行pip --version。已完成pip install pandas jupyter matplotlib。能成功import pandas并打印版本号。已创建并打开一个 Jupyter Notebook 或准备一个.py脚本。4. 2小时学习路线第一阶段 数据结构与读取4.1 学习路线总览时间段学习内容产出0-15 分钟环境准备能import pandas15-45 分钟Series / DataFrame 基础能创建并理解二维表格结构45-70 分钟数据读取与快速查看能把 CSV / Excel 读进来并观察数据70-100 分钟数据清洗与类型转换能处理缺失值、重复值、类型转换100-115 分钟分组聚合与多表合并能完成 groupby 和 merge115-120 分钟导出与综合实战能完整跑通一个分析流程4.2 Series 快速上手Series 是 Pandas 里的一维数据结构可以理解为“带索引的一列数据”。最简单的方式是从列表创建import pandas as pd s pd.Series([100, 200, 300]) print(s)输出会显示两列左边是索引默认从 0 开始右边是数据。你也可以显式指定索引s pd.Series({北京: 100, 上海: 200, 广州: 300}) print(s[北京])Series 的好处是支持向量化运算。比如对整个序列加 10、乘以 2、筛选大于 150 的值都不需要写循环s2 s * 2 print(s2) print(s[s 150])这是 Pandas 的第一个核心思维对整列统一操作而不是逐行处理。4.3 DataFrame 快速上手DataFrame 是 Pandas 的二维表格结构也是实际数据处理中最常用的对象。从字典创建 DataFrame列名就是字典的 keyimport pandas as pd df pd.DataFrame({ 城市: [北京, 上海, 广州, 深圳], 销售额: [100, 200, 150, 180], 成本: [60, 120, 90, 100] }) print(df)运行后你会看到一张 4 行 3 列的表格。df[销售额]可以取出一列返回的是一个 Seriesdf[[城市, 销售额]]取出多列返回的是 DataFrame。新建一列也很简单df[利润] df[销售额] - df[成本] print(df)这里体现了 DataFrame 的核心逻辑每一列都是一个 Series列和列之间可以做算术运算。后面所有复杂操作本质上都是“对某些列做批量处理”。4.4 读取 CSV 与 Excel实际项目中很少手动创建 DataFrame更多是从文件中读取。最常见的是read_csvimport pandas as pd df pd.read_csv(sales_data.csv) print(df.head())如果文件带有中文或 GBK 编码可以指定编码df pd.read_csv(sales_data.csv, encodingutf-8)读取 Excel 需要安装 openpyxlpip install openpyxl然后使用read_exceldf pd.read_excel(sales_data.xlsx, sheet_name订单)读取完成后第一步先看数据长什么样。下面这几个方法必须记住df.head()查看前 5 行df.tail()查看后 5 行。df.shape返回 (行数, 列数)。df.columns查看所有列名。df.info()查看各列的非空数量、数据类型和内存占用。df.describe()对数值列生成均值、标准差、最小值、四分位数等统计摘要。df.dtypes查看每列数据类型。到一个新数据集建议顺序执行先head()再info()再describe()。看完这些你对数据规模、缺失情况和数值分布就有了基本判断。5. 第二阶段 数据清洗与类型转换5.1 缺失值处理数据清洗是 Pandas 使用频率最高的部分没有之一。真实数据里经常出现空值在 Pandas 中表示为NaN。先检查缺失情况print(df.isna().sum())isna()会把每个单元格变成布尔值sum()统计每列有多少个 True也就是空值数量。处理缺失值有两种思路删除df.dropna()删除包含空值的行。填充df.fillna(0)用 0 填充df.fillna(methodffill)用上一个非空值填充。直接删行适合缺失比例很低的情况填充则适合数值型字段比如销售额缺失时可以填 0 或均值。一个更稳妥的做法是分列处理不要全局删除df[销售额] df[销售额].fillna(0) df[城市] df[城市].fillna(未知)5.2 重复值处理重复数据会导致统计结果失真。判断是否有重复行print(df.duplicated().sum())删除完全重复的行df df.drop_duplicates()如果只需要根据部分列去重比如“订单号和商品编号两列都相同则保留第一条”可以用subsetdf df.drop_duplicates(subset[订单号, 商品编号], keepfirst)这个写法对应了很多数据分析题里常出现的去重场景指定两列的值都相同就视为重复。keepfirst表示保留第一次出现的行keeplast表示保留最后一次出现。5.3 数据类型转换读入的数据类型不一定符合需求。最典型的是“销售额”读进来是字符串需要转成数值df[销售额] pd.to_numeric(df[销售额], errorscoerce)时间列读进来是字符串需要转成时间类型df[下单时间] pd.to_datetime(df[下单时间])还有一类普通转换比如把 ID 列转成字符串df[订单号] df[订单号].astype(str)转换完再执行df.dtypes确认每一列都是预期类型。如果转换过程中出现无法解析的值errorscoerce会把非法值变成NaN这样可以避免程序中断。5.4 数据筛选与列操作筛选数据是 Pandas 最常用的操作之一。先用某列的条件筛选行high_sales df[df[销售额] 5000]筛选多个条件result df[(df[销售额] 5000) (df[城市] 上海)]注意这里要用不能用 Python 的and每个条件都要加括号。用loc可以同时按行和列筛选result df.loc[df[销售额] 5000, [城市, 销售额]]删除列df df.drop(columns[备注])这个阶段的目标是拿到一个新表后能主动检查缺失值、重复值、数据类型并按条件筛选出需要的数据。练习时可以人为造一个含空值和重复值的 DataFrame反复跑这些操作直到看到结果不慌为止。6. 第三阶段 分组聚合与多表合并6.1 groupby 分组统计分组聚合是 Pandas 数据分析的核心操作相当于 Excel 里的透视表。语法是先按某个字段分组再对组内其他字段做计算。result df.groupby(城市)[销售额].sum() print(result)这句代码表示按“城市”分组对每个组的“销售额”求和。结果会得到一个 Series索引是城市值是对应销售额总和。如果需要同时看多个统计量用aggresult df.groupby(城市)[销售额].agg([sum, mean, count, max]) print(result)这样就能一次得到总和、均值、数量、最大值。按多个字段分组也很常见result df.groupby([城市, 是否会员])[销售额].sum().reset_index()reset_index()可以把分组结果重新变成规整的 DataFrame。否则结果会以分组字段作为索引初学者经常在这里犯迷糊。6.2 多表合并真实数据分析很少只依赖一张表。订单表通常只有商品编号商品名称和品类在另一张商品表里。这时需要用merge合并order_df pd.read_csv(order.csv) product_df pd.read_csv(product.csv) merged_df pd.merge(order_df, product_df, on商品编号, howleft) print(merged_df.head())on指定连接字段how指定连接方式。left表示左连接保留左边表所有行右边匹配不到就填 NaN。inner是内连接只保留两边都能匹配到的行。除了横向合并还有纵向拼接。当多个文件结构相同时用concat拼起来all_df pd.concat([df1, df2, df3], ignore_indexTrue)这在批量处理多个月份的报表时非常有用。把 12 个月的订单读进来然后用concat拼接再统一做分组统计。6.3 典型练习订单与商品合并统计假设有两张表订单表包含字段订单号、商品编号、销量、销售额商品表包含字段商品编号、商品名称、品类。要统计每个品类的销售额占比先合并再分组merged_df pd.merge(order_df, product_df, on商品编号, howleft) result merged_df.groupby(品类)[销售额].sum().sort_values(ascendingFalse) print(result)这个流程虽然短但把 merge、groupby、sort_values 都串起来了。Pandas 的很多操作都可以链式写合并、筛选、聚合、排序一步完成代码可读性也会更高。7. 第四阶段 导出、可视化与综合实战7.1 数据导出分析结果最终要落地。导出 CSVresult.to_csv(result.csv, indexFalse, encodingutf-8-sig)indexFalse表示不保存索引列encodingutf-8-sig可以避免 Excel 打开 CSV 时中文乱码。导出 Excelresult.to_excel(result.xlsx, indexFalse)写 Excel 同样需要 openpyxl。如果想把多个结果写到同一个 Excel 的不同 sheet可以用ExcelWriterwith pd.ExcelWriter(report.xlsx) as writer: result_summary.to_excel(writer, sheet_name汇总, indexFalse) result_detail.to_excel(writer, sheet_name明细, indexFalse)7.2 可视化基础Pandas 本身不负责绘图但可以配合 matplotlib 快速出图。先导入库import matplotlib.pyplot as plt用 DataFrame 的plot方法画柱状图result.plot(kindbar) plt.title(各城市销售额) plt.show()折线图适合看趋势trend.plot(kindline)可视化不是 Pandas 学习的重点但能帮助你快速检查结果是否合理。数据分析里“先画图再算数字”是很好的习惯一张图往往比表格更容易发现问题。7.3 综合实战销售数据分析流程下面用一个模拟场景把整个流程串起来。目标读取订单明细、清洗数据、合并商品信息、按日期统计销售额、导出结果。import pandas as pd import matplotlib.pyplot as plt # 1. 读取数据 orders pd.read_csv(orders.csv) products pd.read_csv(products.csv) # 2. 快速查看 print(orders.info()) print(orders.head()) # 3. 清洗 orders orders.dropna(subset[销售额]) orders orders.drop_duplicates() orders[下单时间] pd.to_datetime(orders[下单时间]) orders[销售额] pd.to_numeric(orders[销售额], errorscoerce) orders orders.dropna(subset[销售额]) # 4. 合并商品信息 df pd.merge(orders, products, on商品编号, howleft) # 5. 分组统计按日期汇总销售额 df[日期] df[下单时间].dt.date daily_sales df.groupby(日期)[销售额].sum().reset_index() # 6. 输出结果 print(daily_sales.head()) daily_sales.to_csv(daily_sales.csv, indexFalse, encodingutf-8-sig) # 7. 快速可视化 daily_sales.plot(x日期, y销售额, kindline) plt.title(每日销售额趋势) plt.show()这个案例覆盖了读取、查看、清洗、合并、聚合、导出、可视化。如果 2 小时时间不够优先把前 6 步跑通可视化可以放到后面再补。判断标准很明确最终得到一个干净的daily_sales表并能导出 CSV就算掌握了核心流程。8. 常见问题与排查方法问题现象可能原因排查方式解决方案ModuleNotFoundError: No module named pandasPandas 未安装在终端执行pip show pandaspip install pandas安装 pandas 超时网络带宽问题观察 pip 输出使用国内镜像源重装读取 CSV 后中文乱码编码格式不匹配尝试df.head()查看读取时指定encodingutf-8或encodinggbkExcel 文件读不进来缺少 openpyxl看报错提示是否提到openpyxlpip install openpyxl时间列是字符串无法排序未转换为 datetime使用df.dtypes查看类型pd.to_datetime()转换fillna没有生效没有赋值回原变量检查是否有df df.fillna(...)把结果重新赋值给 DataFramegroupby后结果看起来是乱的没有使用reset_index打印结果查看索引加.reset_index()内存占用过高数据量过大查看df.info()的 memory usage按需读取列、使用dtype压缩、分块读取条件筛选报错使用了and而非查看报错信息改为并给每个条件加括号合并后出现大量 NaN连接字段不匹配检查两张表的连接字段取值确认字段格式、去重、调整how类型遇到问题不要急着从头看代码先看报错信息中的最后几行定位是“没安装库”还是“语法错误”再按表里的思路排查。Pandas 的错误提示相对友好只要养成分步运行的习惯问题很快能找到。9. 最佳实践与使用建议9.1 代码与文件管理建议把数据文件、脚本文件、输出结果分目录放比如project/ data/ raw/ processed/ notebooks/ scripts/ output/在处理数据前尽量保留一份原始数据副本不要直接在原文件上覆盖。代码里不要写死绝对路径最好使用相对路径或通过pathlib.Path管理。from pathlib import Path data_dir Path(./data) orders pd.read_csv(data_dir / raw / orders.csv)9.2 批量化与自动化Pandas 非常适合做批量任务。比如多个月的 CSV 文件需要合并可以先遍历目录再用concat汇总import pandas as pd from pathlib import Path files Path(./data/raw).glob(*_orders.csv) frames [] for file in files: df pd.read_csv(file) frames.append(df) all_orders pd.concat(frames, ignore_indexTrue) print(all_orders.shape)这种循环脚本可以直接放进定时任务实现每日自动汇总。如果文件很多、处理流程较长建议在每一步打印日志或者把失败的路径记录下来方便排查。批量任务不是只能靠复杂框架Pandas 脚本完全可以承担大部分日报、周报工作。9.3 合规与隐私提醒数据分析师经常接触真实业务数据。无论是客户信息、员工数据还是订单记录使用前都必须确认授权范围。训练模型、发布报表、写文章示例时不要直接贴真实手机号、身份证号、邮箱等敏感信息。如果确实要用先做脱敏处理比如把姓名替换成“用户A”、手机号中间四位打码。涉及人脸、身份证、地址等强隐私数据时操作前要格外谨慎。9.4 下一步学习建议Pandas 入门之后下一步可以分三个方向继续深入。第一加强数据可视化能力学习 matplotlib 和 seaborn把统计结果做成直观图表。第二学习 numpy理解 DataFrame 底层计算原理这能帮助你写出更高效的代码。第三学习 SQL实际业务中很多数据先存在数据库里Pandas 和 SQL 结合是数据分析师最常用的工作方式。另外可以尝试接触 parquet、feather 这种列式存储格式在数据量较大时读写性能和占用空间都优于 CSV。如果要做更复杂的自动化数据分析可以把手写的 Pandas 脚本整理成函数再通过调度工具定时执行。学 Pandas 不需要把每个函数都背下来先把“读取、清洗、聚合、合并、导出”这条主线练熟遇到新的需求查文档就行。把上面这一套流程反复跑几遍比看十篇教程都管用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价