news 2026/9/20 14:17:41

Pandas入门与实践:从安装配置到数据清洗与分组汇总

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pandas入门与实践:从安装配置到数据清洗与分组汇总

简介: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('姓名', inplace=True)

设完之后,你要查张三的记录,就不再是靠行号定位,而是直接用标签定位:df.loc['张三']。这是Pandas里最核心的定位方式之一,比记忆行号直观得多。

这里要特别提醒一下:inplace=True表示在原始DataFrame上直接修改,不返回新对象。很多人刚开始容易忽略这个参数,结果发现操作之后数据没变,其实就是因为没加inplace=True或者没有把返回值重新赋值。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_name='Sheet1':指定读取哪个工作表,可以传工作表名称,也可以传索引(从0开始)
  • header=0:指定哪一行作为列名,默认是第一行
  • skiprows=N:跳过前N行不读
  • usecols='A:C'或者usecols=['姓名','销售额']:只读取指定的列,数据文件很大的时候这个参数非常管用,能大幅提升读取速度

实际场景中,我从甲方那儿拿到的Excel经常是带标题、带说明、合并单元格混着来的。真正的数据表头可能不在第一行,这时候skiprows就能派上用场。比如前两行是项目说明,第三行才是真正的列名,那就pd.read_excel('xx.xlsx', skiprows=2)

4.2 先处理后写回:Excel导出与格式控制

数据分析不是只读不写。处理完的数据经常要分发出去,最常见的导出就是写回Excel:

df.to_excel('清洗后数据.xlsx', index=False, sheet_name='结果')

index=False这个参数我要单独拿出来说。默认情况下to_excel会把行索引也写进文件,如果你没有自定义索引,那就会多出一列0、1、2、3……这在新手作品里太常见了。你拿到的数据如果多了一列“Unnamed: 0”,八成就是这个原因。所以导出时养成习惯,不需要索引就显式传index=False

如果你想把多个DataFrame写到同一个Excel文件的不同工作表里,可以用ExcelWriter

with pd.ExcelWriter('月度报表.xlsx') as writer: df_1月.to_excel(writer, sheet_name='1月', index=False) df_2月.to_excel(writer, sheet_name='2月', index=False)

这个用法在处理月度汇总报表时特别实用,一次性生成整份工作簿,免去手工复制粘贴。

4.3 CSV读写与编码问题的处理

CSV文件的读写同样高频,但编码问题是绕不开的坑。如果你读CSV出现乱码或者UnicodeDecodeError,绝大多数情况是编码指定不对。国内常见的CSV文件默认是GBK编码,而Pandas默认用utf-8去读,于是直接报错。解决办法:

df = pd.read_csv('数据.csv', encoding='gbk')

反过来,如果你处理完数据要发出去,考虑到接收方可能用什么软件打开,可以在导出时也显式指定编码。一般Windows下的Excel用gbk打开utf-8的CSV会乱码,这一点我踩过很多次坑,后来统一用encoding='utf-8-sig'导出,前面带上BOM头,Excel就能正确识别了。

df.to_csv('处理结果.csv', index=False, encoding='utf-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'], keep='first')

这里keep='first'的意思是保留重复组中的第一条。如果你要保留最后一条,改成keep='last'即可。

5.2 数据类型转换的细节

用Pandas读Excel、CSV最头疼的一件事:数据类型经常不是你想的那样。明明看起来是数字的列,结果dtypes一查是object(字符串);明明应该算日期,Pandas却当成普通字符串。所以拿到数据后先看类型是铁律:

print(df.dtypes)

接着按需转换。最常见的三件套:

  • 字符串转数值:pd.to_numeric(df['销售额'], errors='coerce')
  • 字符串转日期:pd.to_datetime(df['日期'], format='%Y-%m-%d')
  • 数值转字符串:df['列名'].astype(str)

我来解释一下errors='coerce'的作用:数据里混入了“未知”或者“-”这类非数字内容时,直接转数值会报错;加了这个参数后,无法转换的位置会变成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('销售额', ascending=False)

ascending=False表示降序,也就是按销售额从高到低排。多列排序也是常见需求,比如先按城市排、再按销售额排:

df = df.sort_values(['城市', '销售额'], ascending=[True, False])

这里两个排序规则一一对应:城市升序,同城市内销售额降序。

6.3 groupby分组统计的常用套路

分组统计是Pandas所有功能里我认为最值钱的。它是Excel透视表的Python版本,但更灵活。核心用法就一行:

df.groupby('城市')['销售额'].agg(['sum', 'mean', 'count', 'max', 'min'])

这句话的意思是:按“城市”分组,每组统计销售总额、平均值、记录条数、最大值、最小值。agg里可以传入一个列表,同时算多个指标,非常爽。我用它处理过几万行订单数据,按“区域+产品类别”两层分组,组合统计十来个指标,也就几毫秒的事,这份效率在Excel里完全不敢想象。

如果你要分组后分别做不同的事情,groupby配合applytransform更强大。比如前面提到的分组均值填充,就是一个典型应用。还有一个常见场景:找出每个城市销售额最高的一条记录:

df.loc[df.groupby('城市')['销售额'].idxmax()]

idxmax()返回每个分组中最大值对应的索引,再用loc定位到这些行。这个技巧在业务分析中出镜率非常高,记住它。

6.4 数据透视表快速上手

除了groupbypivot_table也是高频工具,尤其是做报表的人。比如你想看“不同城市、不同月份的销售额汇总”:

import numpy as np pivot = pd.pivot_table(df, values='销售额', index='城市', columns='月份', aggfunc=np.sum, fill_value=0)

行是城市、列是月份,交叉点是销售额汇总,fill_value=0把没有数据的格子填成0。这个结果导出到Excel,基本上就是老板最爱看的报表形态了。aggfunc默认是np.mean,你可以换成np.sumnp.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时编码不匹配,改为encoding='gbk',或者先查文件是什么编码再对症下药。

第四个是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类型,把“销售额”强制转为数值,无法转换的置为NaN:

df['订单日期'] = pd.to_datetime(df['订单日期'], errors='coerce') df['销售额'] = pd.to_numeric(df['销售额'], errors='coerce')

第四步,新增一列“月份”方便后续按月统计:

df['月份'] = df['订单日期'].dt.to_period('M')

这里dt访问器是Pandas专门用于datetime列的一个入口,后面可以接yearmonthto_period等属性或方法。这一行代码就能从日期里掏出“月份”这个维度。

第五步,汇总并导出:

report = pd.pivot_table(df, values='销售额', index='城市', columns='月份', aggfunc='sum', fill_value=0) report.to_excel('月度城市销售报表.xlsx', index=True)

到这里,一份标准的“城市x月度”销售汇总报表就出来了,全程不过二十来行代码。如果你不信任自己的数据,可以在中间任何一步加上print(df.head())去看过程结果。我在实际项目中就是这么干的,每处理完一个步骤都瞄一眼长什么样,确认没问题再进入下一步。

这个流程你走通了,Pandas的基础就算真正扎稳了。

最后分享一点个人经验:Pandas不需要背函数,背了也会忘,关键是理解数据结构、理解索引和布尔筛选这些核心机制。用的时候查文档、查资料都很正常,但思考的逻辑、操作的路径,是得靠多做项目才能内化成自己的东西。我每次拿到一套新数据,依然会规规矩矩地info()head()isnull().sum()走一遍,不是我不会别的方法,而是这套流程帮我避开了太多数据上的暗坑。希望你也能把这种“先体检再处理”的习惯融进自己的分析流程里。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 14:16:14

工作流编排与原生多模态Agent:多模态任务的技术选型与实践

1. 两种方案背后的产品思路差异1.1 传统工作流编排:把复杂问题拆成流水线传统工作流编排的核心逻辑,一句话概括就是“分而治之”。它不是让一个模型从头到尾理解整个任务,而是把任务拆成多个原子节点,每个节点只做一件简单的事&am…

作者头像 李华
网站建设 2026/9/20 14:11:13

昇腾NPU上部署Dify:国产算力跑通LLM应用全链路

简介:面向国产昇腾推理服务器与加速卡的大模型部署场景,该可运行源码包提供了在华为硬件上搭建Dify平台的完整参考。内容涵盖大模型推理引擎MindIE以及Embedding、Rerank组件的部署测试,并给出Qwen模型在双卡环境下的配置与验证结果&#xff…

作者头像 李华
网站建设 2026/9/20 14:07:44

自考高级英语中英翻译:掌握长难句与汉译英技巧的备考指南

简介:这是一份面向自考本科英语专业考生的高级英语(上、下册)课文翻译资料,涵盖全册各课重点篇章的英汉对照内容,尤其适合需要逐句理解原文、积累词汇与句型表达的备考者。资源以单个doc文档形式打包,全包仅…

作者头像 李华