十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Pandas入门指南:从Excel数据处理到数据清洗实战

Pandas入门指南:从Excel数据处理到数据清洗实战 简介这是一份面向Python数据分析初学者的《Pandas入门与实践》课件PPT系统讲解Pandas核心数据结构与常用数据处理操作。内容从Series的多种创建方式列表、NumPy数组、字典、标量入手详细说明Index对象的不可变特性和集合操作并对比数组与字典两种数据访问方式随后过渡到DataFrame二维表格结构覆盖缺失值处理、groupby分组聚合、concat与merge合并拆分等高频实用方法。课件中配有大量代码示例和运行结果截图边讲边练能帮助学习者快速搭建Pandas知识框架提升数据清洗与分析效率。资料包共1个文件为pptx演示文稿压缩后大小约3.59MB轻量易下载既可用于教师备课也适合自学复盘。目前已有1257人学习浏览是入门Pandas、掌握数据分析与处理技能的高性价比参考资料。 刚开始接触Python数据分析的人十个里有八个会先碰到Pandas。我做了这几年数据处理相关工作可以说Pandas是绕不开的一个库不管你是用Python读Excel、做数据清洗还是给报表做统计分析它几乎是首选工具。这篇内容实际上是给入门课程准备的课件整理但我会按自己平时使用的思路写出来包含安装、核心数据结构、常见操作、数据预处理和几个高频报错任何人照着走一遍都能上手。如果你是想解决“老板丢给我一个Excel让我统计一下”这类需求的人或者准备往数据分析方向走这篇尤其适合。Pandas能让你用几行代码替代手动筛选、公式、透视表那套繁琐操作同时把处理过程留档下次换一批数据直接重跑就行。1. Pandas到底解决什么问题1.1 为什么不用Excel非得学Pandas我在带新人时经常被问到这个问题。Excel在处理几千行数据时没问题但一旦上了几万行公式卡顿、筛选困难、VLOOKUP匹配慢到让人怀疑人生。Pandas的核心是把表格抽象成DataFrame对象所有操作在内存中完成几万行、几十万行的数据筛选、聚合、join也就是毫秒秒级的事。另一个优势是可复现。你用Excel做数据清洗每一步点击都留在操作记录里但换个数据源又得重新点一遍。Pandas把过程写成脚本下次直接改文件路径就能运行。还有一点Excel处理不了的编码问题、超大数据集、批量文件合并Pandas都能比较优雅地解决。所以不是Excel不够好而是Pandas在处理批量、重复、复杂逻辑时有天然优势。1.2 环境准备装Python和PyCharm如果你用的是PyCharm安装Pandas有两种方式。第一种是在PyCharm的Terminal面板里直接执行pip install pandas这种适合已经装好Python环境的情况。如果涉及Excel读写我建议一步到位安装openpyxl这是Pandas读取新版xlsx文件的引擎之一很多新手报错“Missing optional dependency openpyxl”就是少了它pip install pandas openpyxl第二种方式是在PyCharm的设置里操作进入File - Settings - Project - Python Interpreter点右侧加号搜索pandas再点Install Package。这种方式适合不太习惯命令行的朋友但需要注意选对解释器有时候你装了包代码里还是import不到就是因为解释器选错了。这里要提醒一句如果你电脑里同时有Python 2和Python 3或者装了Anaconda一定要在PyCharm右下角确认当前项目用的是哪个解释器。我见过太多学员在系统Python里pip install项目却用虚拟环境结果import pandas直接报ModuleNotFoundError。2. 两个核心数据结构Series和DataFrame2.1 用生活例子分清Series和DataFramePandas里有两个基础对象Series和DataFrame。新手容易混我上课时喜欢拿表格来类比。DataFrame就是一张完整的表格有行有列比如Excel里的一个sheet页。Series则是表格里单独的一列或者单独一行取出来后的数据带着索引。你可以把DataFrame理解成“多个Series拼在一起”它们共享同一个行索引。实际操作中我们几乎都是围绕DataFrame在做事Series更多出现在中间环节比如你筛选出一列做统计得到的往往就是一个Series。创建一个最简单的Seriesimport pandas as pd s pd.Series([10, 20, 30], index[a, b, c]) print(s)输出结果会带着索引列左边是索引右边是值。Series在很多场景下可以直接调用NumPy的数学方法比如s.sum()、s.mean()这也是Pandas和NumPy配合紧密的原因。2.2 创建DataFrame的三种常用方式我日常创建DataFrame比较常用的方式有三种。第一种用字典创建。字典的键是列名值是列表这种最直观data { 姓名: [张三, 李四, 王五], 城市: [北京, 上海, 广州], 销售额: [100, 200, 150] } df pd.DataFrame(data)第二种从列表套列表创建每一行是一个列表然后通过columns参数指定列名df pd.DataFrame( [[张三, 北京, 100], [李四, 上海, 200]], columns[姓名, 城市, 销售额] )第三种也是实战中最常用的从外部文件读取。拿出一个Excel或者CSV直接读进来这个我们放在下一节细说。创建完成之后可以先看看数据的基本情况。我强烈建议每次拿到DataFrame都执行df.head()、df.info()、df.describe()这三个方法前两个能让你快速知道数据长什么样、有哪些列、有没有空值第三个能直接给你数值型列的描述统计。这不是花架子而是避免后面踩坑的第一步。3. 读取Excel文件与最常用操作3.1 读写Excel时openpyxl扮演的角色Pandas读取Excel的核心方法是pd.read_excel()。第一个参数是文件路径第二个参数sheet_name用来指定工作表可以传数字也可以传工作表名称df pd.read_excel(销售数据.xlsx, sheet_nameSheet1)如果你不传sheet_namePandas默认读取第一个工作表。如果你传sheet_nameNone返回的是一个dict里面包含所有工作表每个表对应一个DataFrame。这个在做多表合并时非常实用。读取Excel需要指定引擎Pandas默认会优先用openpyxl处理xlsx文件所以装openpyxl基本是必须的。写入Excel也是一样df.to_excel()保存xlsx文件时底层也依赖openpyxl。你如果遇到“EngineError”或者“Install openpyxl”这类提示直接执行pip install openpyxl就行。还有一个小点很多人的Excel里有合并单元格或者标题占了两行这时候可以在read_excel里加header参数比如header1表示把第2行作为列名。这个参数在处理“带大标题”的报表时特别顶用。3.2 数据筛选和drop操作读进来数据之后最常做的操作就是筛选。Pandas的筛选逻辑看起来很直接但新手容易写错。选列用df[列名]选多列用df[[列名1, 列名2]]。按条件筛行用的是布尔索引比如# 筛选销售额大于150的行 df_filtered df[df[销售额] 150]这里要注意df[销售额] 150生成的是一个布尔型Seriesdf[布尔Series]会把对应位置为True的行留下。很多初学会写成df[df[销售额] 150][销售额]这个链条也能跑但我更推荐用.loc来明确筛选df_filtered df.loc[df[销售额] 150, [姓名, 销售额]].loc的形式是[行条件, 列条件]用起来语义清晰容易维护。drop操作是用来删除行或列的。默认axis0表示删行如果你想删列必须指定axis1或者参数改成columns# 删除列 df.drop([城市], axis1, inplaceTrue) # 删除行 df.drop([0, 1], inplaceTrue)我踩过的坑是drop方法默认不修改原df而是返回一个新对象。有时候我写完df.drop(城市, axis1)发现原数据没变化就是因为忘了重新赋值或者加inplaceTrue。这里我个人的习惯是尽量不用inplace直接用df df.drop(...)这样更符合函数式写法也方便链式操作。3.3 数据类型转换的优先级问题读取Excel之后最常见的类型问题就是“数字变成了文本”或者“日期变成了字符串”。Pandas里用astype做强制类型转换比如df[销售额] df[销售额].astype(float) df[日期] pd.to_datetime(df[日期])但是astype有个坑如果数据里有无法转换的内容比如“100元”这种带单位的字符串直接astype会抛异常。我一般会先用pd.to_numeric配合errorscoerce处理把无法转换的值变成NaN再做后续处理df[销售额_数字] pd.to_numeric(df[销售额], errorscoerce)日期转换也有类似情况pd.to_datetime遇到不规范的日期格式同样可以用errorscoerce处理。这个方法在我看来比astype更适合做数据清洗因为astype在失败时直接中断而现实中的数据很少是干干净净的。4. 数据预处理缺失值、去重与分组4.1 缺失值处理策略处理缺失值是数据预处理里最绕不开的一环。Pandas里判断缺失值用isnull()统计每一列缺失数量可以用df.isnull().sum()。处理缺失值基本有两条路删除或者填充。行数多且缺失占比小直接删掉问题不大df_clean df.dropna()但如果你担心删掉太多有效数据可以考虑填充。数值列一般用均值或中位数填充分类列用众数或固定字符串填充df[销售额].fillna(df[销售额].median(), inplaceTrue) df[城市].fillna(未知, inplaceTrue)我实际做项目时还有一种更推荐的方式就是先用groupby分组再对每个组分别填充。比如不同城市的销售额水平差异明显用全表均值填充就不太合理这时候按城市分组填充局部均值更能保持数据分布特征。4.2 去重和排序的细节重复数据处理看两个核心方法duplicated和drop_duplicates。duplicated返回布尔Series标记哪些行是重复的drop_duplicates直接删除重复行df_unique df.drop_duplicates()如果你想根据某一列去重比如每个城市只保留一条数据可以传subset参数df_unique df.drop_duplicates(subset[城市])排序同样很常用sort_values支持单列和多列排序关键是理解ascending参数。默认升序用False改成降序df_sorted df.sort_values(by[销售额], ascendingFalse)多列排序时by传一个列表ascending可以对应传一个布尔列表比如按城市升序、按销售额降序df_sorted df.sort_values(by[城市, 销售额], ascending[True, False])很多人容易忽略的是排序后的索引会乱掉如果你后续要合并或者按位置取数最好加上ignore_indexTrue重新生成索引。这个细节在小数据集上无所谓上了量就很容易出问题。4.3 分组聚合替代透视表的利器Excel里做汇总常用透视表Pandas里对应的是groupby。语法看起来简单但要理解“分组-聚合”两个步骤。分组之后必须跟上聚合操作比如sum、mean、count才能真正计算结果result df.groupby(城市)[销售额].sum().reset_index()这行代码的意思是按城市分组对销售额求和最后把结果转回普通DataFrame。很多人漏掉reset_index结果发现得到的是一个Series列名还乱了。加上reset_index之后结果就像一张普通的表格方便后续保存或用于其他计算。多个聚合函数同时使用也很常见用agg方法result df.groupby(城市)[销售额].agg([sum, mean, count]).reset_index()这个结果列名会变成sum、mean、count你可以用rename重新设置列名导出报表的时候更好看。Excel透视表能做的groupby基本都能做而且脚本可以反复跑这是我切换过来的最大动力。5. 新手必看常见报错和排查技巧5.1 几个高频报错速查边看边修我在带课过程中收集了下面这些出现频率最高的报错整理成了一张速查表照着排查基本都能解决。报错信息出现原因解决办法ModuleNotFoundError: No module named pandas环境里没装pandas或装到了别的解释器检查PyCharm解释器执行pip install pandasMissing optional dependency openpyxl读取xlsx需要openpyxl引擎执行pip install openpyxlKeyError: 列名列名写错或者列名有空格先df.columns查看真实列名再复制使用SettingWithCopyWarning对DataFrame切片后直接修改用.loc或者.copy()创建副本再修改ValueError: cannot convert float NaN to integer有缺失值却强制转int先处理NaN或用float类型AttributeError: Series object has no attribute columns误把Series当DataFrame操作检查返回值类型必要时reset_index其中SettingWithCopyWarning是很多人的噩梦。Pandas官方警告的意思是你的操作可能修改的是副本而不是原数据。我遇到这种情况通常就是在筛选之后加.copy()比如df_sub df[df[销售额] 100].copy()这样后续修改就不会触发警告。5.2 我怎么定位“诡异问题”的遇到过一种很典型的情况数据读取没问题但是df[销售额].sum()算出来不是整数而是带了很多小数位或者直接是NaN。这种情况十有八九是某几行数据里混入了非数字比如字符串中的空格、逗号、人民币符号导致整列被识别成object类型。我的排查顺序是先df.dtypes看列类型。如果销售额显示object说明数据不干净。再df[销售额].astype(str).str.contains(r[a-zA-Z\u4e00-\u9fa5])去找非数字行。这个思路能定位到具体异常数据。用pd.to_numeric(errorscoerce)把能转的转掉不能转的变成NaN再做填充或删除。这个方法在处理爬虫数据、业务系统导出的Excel时特别管用。还有一次我发现drop_duplicates去重没生效排查了半天原来是同一批数据里有些单元格后面带了不可见特殊符号。用df[列名].str.strip()清理空格和换行符之后再去重就正常了。数据问题往往不在Pandas而在源头数据本身。6. 把Pandas用在真实场景里的一点建议课件到这里基础操作基本覆盖得差不多了。最后分享几个我在实际项目里的习惯。第一处理任何文件前先备份原始文件。你可能觉得这是废话但我在办公室里已经不止一次看到有人直接在原文件上跑清洗脚本跑完发现逻辑写反了数据全坏了又找不到恢复版本。Pandas的写回操作是覆盖式的谨慎一点没坏处。第二尽量让每一步操作都留痕。我常年用一个叫“数据处理流水账”的习惯就是把读取、清洗、转换、输出每个阶段都拆成独立变量比如df_raw、df_clean、df_final这样中途想查看哪里出了问题随时都能对比。第三学会把调试用的打印代码留着。df.head()、print(df.columns)、df.info()这些方法不算多余代码尤其在脚本越来越长时它们就是你快速定位数据的路标。我之前带的一个学员自己用Pandas写了个销售周报处理逻辑后来数据源增加了几个字段整个脚本跑不通了。就是因为没有保留一开始查看结构的习惯对着报错瞎猜了很久。如果每次都先打印df.columns问题一下就能定位。另外一个我越用越频繁的操作是批量合并Excel文件。办公楼里经常有人拿十几个同格式的Excel要我汇总几十行代码搞定。核心就是循环读取加pd.concat。大家学完基础之后可以朝这个方向练手。Pandas这个东西入门不难难点在于习惯养成。用过一段时间后你回去再碰几万行的Excel心里会很清楚这个活儿应该交给脚本而不是手动。我的建议是不要一上来就追求高级操作把读取、筛选、类型转换、缺失值处理、分组聚合这五个基本功练熟已经能解决日常工作中八成以上的数据问题。剩下的等真正遇到需求再拿文档和搜索去补反而学得更快。本文还有配套的精品资源点击获取
返回列表