Pandas入门与实践:从安装配置到数据清洗与分组汇总 📅 发布时间:2026/9/20 14:17:46 👁 浏览次数: 简介Pandas入门与实践课件是一套面向Python数据分析初学者的教学PPT聚焦Pandas在数据清洗、处理与分析中的核心应用涵盖Series、DataFrame、Index等关键数据结构及缺失值处理、数据分组、拆分合并等常用操作。课件共1个pptx文件压缩包大小3.59MB内容精炼、结构清晰适合正在接触数据分析或希望系统掌握Pandas基础操作的读者。已有1257人参与学习口碑与实用性得到初步验证。课件详细介绍了Series的五种创建方式、Index不可变特性及集合运算、Series的数组/字典式访问方法并通过DataFrame演示实际数据处理流程包括dropna、fillna处理缺失值groupby实现分组聚合concat、merge进行数据合并等还配有大量代码示例与效果展示可帮助读者快速上手Pandas操作Excel等常见场景提升日常数据分析效率。1. 为什么Pandas是数据分析的“第一块敲门砖”我第一次接触Pandas是在处理一份几千行的销售记录时当时还在用Excel手工筛选、VLOOKUP匹配数据一多就卡得怀疑人生。后来换成Pandas同样的活儿从半小时压缩到几秒钟那一刻我真的觉得“打开新世界的大门”。Pandas这个Python库说白了就是Python世界里的Excel Plus但它的能力远远超出表格处理本身——无论是数据清洗、字段筛选、多表拼接、时序重采样还是数据聚合Pandas都能用几行代码扛下来。对于一个想入门数据分析的人Pandas基本是绕不开的第一步也是性价比最高的一步。这篇文章适合谁如果你有最基础的Python语法知识知道怎么定义变量、写个for循环但面对一堆CSV、Excel数据不知从何下手那这篇“Pandas入门与实践”就是为你准备的。如果你已经在用Excel做数据分析想换工具提升效率同样适用。全文我会按照我自己学习、讲课、实际做项目的路径来梳理从安装环境、数据读写、数据结构、数据清洗到常见坑位排查全是干货不会讲虚的。网上关于Pandas的资料非常多但很多教程只讲API不讲“为什么这么做”和“实际中会遇到什么坑”。这篇文章我会用大量真实项目中会遇到的场景来讲让你学完就能直接上手干活而不是停留在“看懂了但不会用”的状态。2. Pandas环境搭建与安装实操2.1 用pip安装Pandas及依赖包pip install pandas是我在给学员上课时敲的第一条命令。安装本身并不复杂但有几个细节值得注意。如果你用Anaconda发行版Pandas通常已经内置直接import pandas as pd就能用不需要额外安装。但如果你用的是纯Python环境或者像PyCharm这种IDE自带的解释器那你大概率需要手动装。最常见的方式就是在终端或命令行里执行pip install pandas这一步会把Pandas以及它的核心依赖——NumPy、python-dateutil、pytz等一并装上。装完之后建议顺手装一下openpyxl为什么因为Pandas读写Excel文件时.xlsx格式默认依赖openpyxl引擎不装的话read_excel(/path/file.xlsx)会直接给你抛个 ImportError。很多新手在pip install pandas之后高高兴兴去读Excel结果报错“Missing optional dependency openpyxl”一脸懵其实就是漏了这一步。pip install pandas openpyxl我建议你直接用这一条命令装全省得后面补课。2.2 PyCharm等IDE中安装Pandas的两种方式在PyCharm里装Pandas很多初学者会困惑到底在终端敲还是在IDE里面点。实际上两种都行。第一种是直接用PyCharm底部的Terminal窗口它会自动定位到你当前项目的虚拟环境执行上面的pip install pandas openpyxl即可。第二种是走图形界面File - Settings - Project - Python Interpreter点右侧的“”号在搜索框里输入pandas选中后点击左下角的Install Package。这种方式的好处是不用记命令适合对命令行还不熟的朋友。不过这里有个实操中很常见的坑如果你在PyCharm里创建项目时选了虚拟环境venv而你后来又在系统Python里装了Pandas那PyCharm项目里照样import不到。别问我怎么知道的这个问题在答疑群里被问过不下二十次。记住一个原则Pandas装到哪个解释器里就只有哪个解释器能用。你需要在PyCharm右下角确认当前用的是哪个解释器再决定在哪儿装。验证安装是否成功在PyCharm里新建一个Python文件写下import pandas as pd print(pd.__version__)能打印出版本号就说明环境没问题了。3. Pandas核心数据结构与基础操作3.1 Series与DataFrame的关系很多新手一上来就被Series和DataFrame这两个概念绕晕。我用一句话给你讲明白Series是一维的带标签数组DataFrame是二维的表格。DataFrame可以理解成多个Series拼在一起的结果每一列都是一个Series所有列共用一个行索引。我上课时常举一个生活化的例子把Series想象成一张单列记账单每笔金额有一个日期标签DataFrame就是一张完整的记账表有日期、金额、分类、备注好几列但不管几列每一行仍然对应同一条记录。理解了这个关系后面操作起来会顺畅很多。创建DataFrame最常用的方式是传入字典import pandas as pd data { 姓名: [张三, 李四, 王五], 城市: [北京, 上海, 广州], 销售额: [12000, 8500, 9300] } df pd.DataFrame(data) print(df)输出就是一个规整的表格行索引默认是0、1、2。这个“默认行索引”是Pandas里的基础设计后面我们会经常用到它做定位和筛选。3.2 为什么索引从0开始及如何自定义索引索引是Pandas的灵魂。默认情况下DataFrame的行索引是RangeIndex从0开始递增类似于Python列表的下标。但实际业务中我们经常需要更有实际含义的索引比如按日期、按员工ID。这时候可以用set_index把某一列变成索引df.set_index(姓名, inplaceTrue)设完之后你要查张三的记录就不再是靠行号定位而是直接用标签定位df.loc[张三]。这是Pandas里最核心的定位方式之一比记忆行号直观得多。这里要特别提醒一下inplaceTrue表示在原始DataFrame上直接修改不返回新对象。很多人刚开始容易忽略这个参数结果发现操作之后数据没变其实就是因为没加inplaceTrue或者没有把返回值重新赋值。Pandas很多方法默认返回新对象、不改原数据这是它的一个设计理念——默认不破坏原始数据保证操作的安全性。但代价就是新手容易懵。我给你的建议是初期统一用“重新赋值”的方式df df.set_index(姓名)这样意图更清晰也避免在函数调用链中因为inplace引发连锁问题。4. 数据读写Excel和CSV的完整链路4.1 用Pandas读取Excel文件read_excel是处理业务数据最高频的函数之一。语法很简单df pd.read_excel(销售数据.xlsx) df.head()head()会显示前5行这是拿到任何数据之后的第一动作——先看看数据长什么样别急着做处理。有几个常用参数我建议你记住sheet_nameSheet1指定读取哪个工作表可以传工作表名称也可以传索引从0开始header0指定哪一行作为列名默认是第一行skiprowsN跳过前N行不读usecolsA:C或者usecols[姓名,销售额]只读取指定的列数据文件很大的时候这个参数非常管用能大幅提升读取速度实际场景中我从甲方那儿拿到的Excel经常是带标题、带说明、合并单元格混着来的。真正的数据表头可能不在第一行这时候skiprows就能派上用场。比如前两行是项目说明第三行才是真正的列名那就pd.read_excel(xx.xlsx, skiprows2)。4.2 先处理后写回Excel导出与格式控制数据分析不是只读不写。处理完的数据经常要分发出去最常见的导出就是写回Exceldf.to_excel(清洗后数据.xlsx, indexFalse, sheet_name结果)indexFalse这个参数我要单独拿出来说。默认情况下to_excel会把行索引也写进文件如果你没有自定义索引那就会多出一列0、1、2、3……这在新手作品里太常见了。你拿到的数据如果多了一列“Unnamed: 0”八成就是这个原因。所以导出时养成习惯不需要索引就显式传indexFalse。如果你想把多个DataFrame写到同一个Excel文件的不同工作表里可以用ExcelWriterwith pd.ExcelWriter(月度报表.xlsx) as writer: df_1月.to_excel(writer, sheet_name1月, indexFalse) df_2月.to_excel(writer, sheet_name2月, indexFalse)这个用法在处理月度汇总报表时特别实用一次性生成整份工作簿免去手工复制粘贴。4.3 CSV读写与编码问题的处理CSV文件的读写同样高频但编码问题是绕不开的坑。如果你读CSV出现乱码或者UnicodeDecodeError绝大多数情况是编码指定不对。国内常见的CSV文件默认是GBK编码而Pandas默认用utf-8去读于是直接报错。解决办法df pd.read_csv(数据.csv, encodinggbk)反过来如果你处理完数据要发出去考虑到接收方可能用什么软件打开可以在导出时也显式指定编码。一般Windows下的Excel用gbk打开utf-8的CSV会乱码这一点我踩过很多次坑后来统一用encodingutf-8-sig导出前面带上BOM头Excel就能正确识别了。df.to_csv(处理结果.csv, indexFalse, encodingutf-8-sig)这是我从实战里拿到的经验文档里不会明确告诉你但遇到一次就会终身记住。5. 数据清洗与预处理实战5.1 删除行或列drop的进阶玩法现实数据从来没有干干净净的缺失值、错误值、冗余列到处都是。drop就是用来做减法的。删除某几列用列名列表删除某些行用索引df df.drop(columns[备注, 冗余字段]) df df.drop(index[0, 1])drop默认也是返回新对象同样要注意重新赋值。还有一个高频需求是去重drop_duplicates()可以按整行去重也可以按指定列去重比如只按“用户ID”去重保留第一条记录df df.drop_duplicates(subset[用户ID], keepfirst)这里keepfirst的意思是保留重复组中的第一条。如果你要保留最后一条改成keeplast即可。5.2 数据类型转换的细节用Pandas读Excel、CSV最头疼的一件事数据类型经常不是你想的那样。明明看起来是数字的列结果dtypes一查是object字符串明明应该算日期Pandas却当成普通字符串。所以拿到数据后先看类型是铁律print(df.dtypes)接着按需转换。最常见的三件套字符串转数值pd.to_numeric(df[销售额], errorscoerce)字符串转日期pd.to_datetime(df[日期], format%Y-%m-%d)数值转字符串df[列名].astype(str)我来解释一下errorscoerce的作用数据里混入了“未知”或者“-”这类非数字内容时直接转数值会报错加了这个参数后无法转换的位置会变成NaN缺失值不会中断程序你后面再统一处理缺失值就行。这是处理真实脏数据时必备的一招。日期转换里format参数我建议你养成显式指定的习惯。虽然Pandas有自动推断日期的功能但面对不规范的日期格式比如“2024/1/5”“20240105”“2024-01-05 08:30:00”混在一起的情况显式指定格式能减少很多莫名其妙的解析错误。5.3 缺失值处理与数据预览拿到脏数据先看整体健康度print(df.isnull().sum())这个操作会告诉你每一列有多少缺失值。缺失值的处理策略取决于业务场景。如果缺失行占比很小直接删掉df df.dropna()如果有业务含义的列缺失严重比如“客户评分”缺了80%建议整列删除。但对于数值型的关键列比如“销售额”缺失了个别值更适合用填充的方式df[销售额] df[销售额].fillna(df[销售额].mean())用均值填充是最常用的方案。但你要理解这样做的副作用——它会让该列的方差变小如果后续做统计分析会略微影响结果。所以更精细的做法是按分组填充比如按城市分组后用每个城市的平均销售额去补缺失值df[销售额] df.groupby(城市)[销售额].transform(lambda x: x.fillna(x.mean()))这个逻辑很符合业务直觉北京的缺失值用北京的平均水平去补而不是拿全国平均去凑。在真实项目里这种处理方式往往更能说服业务方。6. 数据筛选、排序与分组统计6.1 基于条件的数据筛选数据分析的一半工作就是筛选——找出你想要的那部分数据。Pandas筛选的核心是布尔索引。比如找出销售额大于10000的记录high_sales df[df[销售额] 10000]这里df[销售额] 10000生成一个布尔序列df[...]只保留对应位置为True的行。多个条件组合时用表示与、|表示或、~表示非每个条件都要用括号括起来df[(df[销售额] 10000) (df[城市] 北京)]新手最容易忘记括号导致报错“The truth value of a Series is ambiguous”。这个报错我见了太多次了原因就是Python会把这一整段判断当成布尔值去判断但实际上它应该是一个逐元素判断的序列。加上括号各归各位就好理解也更好用了。6.2 排序与排名操作排序用的是sort_values同样默认返回新对象df df.sort_values(销售额, ascendingFalse)ascendingFalse表示降序也就是按销售额从高到低排。多列排序也是常见需求比如先按城市排、再按销售额排df df.sort_values([城市, 销售额], ascending[True, False])这里两个排序规则一一对应城市升序同城市内销售额降序。6.3 groupby分组统计的常用套路分组统计是Pandas所有功能里我认为最值钱的。它是Excel透视表的Python版本但更灵活。核心用法就一行df.groupby(城市)[销售额].agg([sum, mean, count, max, min])这句话的意思是按“城市”分组每组统计销售总额、平均值、记录条数、最大值、最小值。agg里可以传入一个列表同时算多个指标非常爽。我用它处理过几万行订单数据按“区域产品类别”两层分组组合统计十来个指标也就几毫秒的事这份效率在Excel里完全不敢想象。如果你要分组后分别做不同的事情groupby配合apply或transform更强大。比如前面提到的分组均值填充就是一个典型应用。还有一个常见场景找出每个城市销售额最高的一条记录df.loc[df.groupby(城市)[销售额].idxmax()]idxmax()返回每个分组中最大值对应的索引再用loc定位到这些行。这个技巧在业务分析中出镜率非常高记住它。6.4 数据透视表快速上手除了groupbypivot_table也是高频工具尤其是做报表的人。比如你想看“不同城市、不同月份的销售额汇总”import numpy as np pivot pd.pivot_table(df, values销售额, index城市, columns月份, aggfuncnp.sum, fill_value0)行是城市、列是月份交叉点是销售额汇总fill_value0把没有数据的格子填成0。这个结果导出到Excel基本上就是老板最爱看的报表形态了。aggfunc默认是np.mean你可以换成np.sum、np.count等按需选择。7. 常见报错与实战排查技巧7.1 五个高频报错的解决方法我把自己讲课和答疑中遇到的Pandas高频报错整理了一下每个新手基本都会碰到至少两三个。第一个是ModuleNotFoundError: No module named pandas。原因就一个当前解释器环境里没装Pandas。解决方式就是回到本文第二章节确认解释器执行pip install pandas openpyxl。第二个是Missing optional dependency openpyxl。读Excel时最容易触发。解决方式pip install openpyxl。第三个是UnicodeDecodeError。前面讲过读CSV时编码不匹配改为encodinggbk或者先查文件是什么编码再对症下药。第四个是The truth value of a Series is ambiguous。多条件筛选时没加括号。解决方式就是条件表达式全部用括号包裹然后使用或|。第五个是KeyError。一般是你用了一个不存在的列名。建议先跑一下df.columns确认列名尤其是Excel文件里列名带了空格或不可见字符的情况。7.2 实战中的数据排查技巧拿到一个新数据集不管是什么格式我的习惯是固定跑五个操作df.head()看前几行、df.info()看数据类型和缺失概况、df.describe()看数值列的统计分布、df.isnull().sum()看每列缺失量、df.duplicated().sum()看重复行数。这五步10秒钟内完成你对数据的整体认知就建立起来了。df.info()是特别容易被忽略但特别有用的一个方法。它会把每一列的名称、非空数量、数据类型全部以紧凑的表格列出来一眼扫过去就知道哪些列有缺失、哪些列类型不对。我见过很多同学处理数据半天结果发现是某个日期列被读成了object类型后面所有时间相关的操作全部失灵。如果一开始先info()一下这个坑就根本不会踩到。8. 一步步做一个小项目订单数据清洗与汇总学完上面这些内容我建议你找一个真实的数据集把整套流程走一遍。拿订单数据举例完整的处理链路长这样读数据 - 看结构 - 清洗缺失 - 修正类型 - 筛选有效记录 - 分组汇总 - 导出报表。第一步读入数据并快速体检import pandas as pd df pd.read_excel(订单数据.xlsx, sheet_name明细) print(df.info()) print(df.head())第二步处理缺失值。删除“订单编号”缺失的行它没有业务意义再用城市均值填充“销售额”缺失值。df df.dropna(subset[订单编号]) df[销售额] df.groupby(城市)[销售额].transform(lambda x: x.fillna(x.mean()))第三步类型修正。把“订单日期”转成datetime类型把“销售额”强制转为数值无法转换的置为NaNdf[订单日期] pd.to_datetime(df[订单日期], errorscoerce) df[销售额] pd.to_numeric(df[销售额], errorscoerce)第四步新增一列“月份”方便后续按月统计df[月份] df[订单日期].dt.to_period(M)这里dt访问器是Pandas专门用于datetime列的一个入口后面可以接year、month、to_period等属性或方法。这一行代码就能从日期里掏出“月份”这个维度。第五步汇总并导出report pd.pivot_table(df, values销售额, index城市, columns月份, aggfuncsum, fill_value0) report.to_excel(月度城市销售报表.xlsx, indexTrue)到这里一份标准的“城市x月度”销售汇总报表就出来了全程不过二十来行代码。如果你不信任自己的数据可以在中间任何一步加上print(df.head())去看过程结果。我在实际项目中就是这么干的每处理完一个步骤都瞄一眼长什么样确认没问题再进入下一步。这个流程你走通了Pandas的基础就算真正扎稳了。最后分享一点个人经验Pandas不需要背函数背了也会忘关键是理解数据结构、理解索引和布尔筛选这些核心机制。用的时候查文档、查资料都很正常但思考的逻辑、操作的路径是得靠多做项目才能内化成自己的东西。我每次拿到一套新数据依然会规规矩矩地info()、head()、isnull().sum()走一遍不是我不会别的方法而是这套流程帮我避开了太多数据上的暗坑。希望你也能把这种“先体检再处理”的习惯融进自己的分析流程里。本文还有配套的精品资源点击获取