尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Pandas速通指南:从数据清洗到分析实战的完整路径

Pandas速通指南:从数据清洗到分析实战的完整路径 Pandas 是 Python 数据分析里绕不开的核心库。这套“2小时速通Pandas”的教程最值得关注的不是“快”而是它把数据分析的完整路径串了起来从读取数据、清理数据、分组聚合到多表合并、时间序列、简单可视化。也就是说它解决的并不是某个函数怎么背而是让你在真实分析任务里能从头到尾走通流程而不是学完一堆 API 却不知道什么时候用。先说结论这套内容适合三类人。第一类是刚入门 Python、想用 Pandas 做数据处理和分析的新手第二类是有 Excel 经验、想把数据处理习惯迁移到 Python 的办公场景用户第三类是已经会用 Pandas 但是流程混乱、只会复制粘贴零散代码的人。不太适合谁呢如果你已经能独立完成“读取数据—清洗—聚合—导出”这条链路并且能处理多表关联和复杂分组统计那这套内容对你来说属于查漏补缺不会带来太多新东西。看完这套内容我的核心感受是Pandas 学习的真正门槛不是函数多、参数复杂而是数据思维。你首先要理解什么叫“把数据装进表里”什么叫“按某一列分组”什么叫“透视”然后才是写代码。所以下面我不会只罗列视频里的知识点而是按一条实际分析任务的学习顺序把 Pandas 的关键操作、判断标准、常见坑点和排查路径都拆开讲一遍。1. 这套“2小时速通Pandas”教程先解决什么问题1.1 它是一条完整的学习路径不是零散技巧合集很多人学 Pandas 的方式是今天学一个read_csv明天学一个groupby后天又看到一个merge结果遇到真实数据时完全不知道从哪里下手。这套教程比较好的一点是它按分析流程组织内容而不是按函数表组织内容。顺序大概是认识 Series 和 DataFrame 数据结构读取 CSV、Excel、数据库等数据源查看数据基本信息处理缺失值和重复值类型转换和字段处理分组聚合与透视表多表合并与连接时间序列处理数据可视化综合案例分析这个顺序本身就很合理。它不是在教你背函数而是在教你在拿到一份数据之后第一步做什么、第二步做什么、什么时候该停下来检查数据。1.2 学 Pandas 的核心不是 API是数据处理链条我见过太多人把精力花在“记住所有参数”上结果一到实战还是卡住。真正要建立的是数据处理的链条意识拿到数据先看形状和行列再看列名和类型然后处理脏数据最后才进入统计分析和输出结果。这套教程在讲解时也基本遵循这个链条。它告诉你什么时候用head()查看前几行什么时候用info()查看结构什么时候用describe()查看数值分布。这些动作不是多余的它们是数据分析里最重要的一环先了解数据再动手处理。1.3 适合谁看不适合谁看适合刚学完 Python 基础语法想进入数据分析方向的人有大量 Excel 操作经验、想用脚本替代重复操作的人课程、论文、项目里需要处理表格数据的学生想快速掌握数据清洗和整理能力的开发人员不太适合已经能独立完成完整分析项目的人需要深入学习 Pandas 底层实现原理的人做超大规模数据千万行以上和分布式计算的人如果你属于最后两类可以跳过这套内容或者在看完之后直接进入源码阅读和性能优化阶段。2. 环境准备安装 Pandas 前先把这几件事做对2.1 用 Anaconda 还是原生 Python学习 Pandas 的阶段我建议直接用 Anaconda。原因很简单它已经内置了 Pandas、NumPy、Matplotlib、Jupyter Notebook 这些常用数据分析工具省去很多安装和版本冲突的麻烦。如果你已经用原生 Python 也不影响安装 Pandas 本身不复杂但需要自己处理依赖。Anaconda 的优势是“全家桶”式管理适合新手快速开始。原生 Python pip 的优势是环境更轻、更可控适合有经验的人按需安装。两者都能完成接下来所有操作。2.2 安装命令和版本匹配如果使用 pip 安装命令如下pip install pandas如果需要安装到指定环境先激活环境再执行安装。国内网络环境下建议使用镜像源加速pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple在 PyCharm 里安装 Pandas 也很直接进入File - Settings - Project - Python Interpreter点击加号搜索“pandas”选中后点击安装即可。关于版本匹配热词里有人问 Python 3.10 与哪个 Pandas 版本适配。目前主流 Pandas 版本都支持 Python 3.9 到 3.12Python 3.10 环境下安装最新版 Pandas 基本没有问题。如果安装时出现依赖冲突可以优先尝试升级 pip然后重新安装pip install --upgrade pip pip install pandas2.3 安装完成后怎么验证安装完成后打开 Python 交互环境或写一个临时脚本执行以下代码import pandas as pd print(pd.__version__)如果能看到版本号输出说明安装成功。注意如果导入时提示缺少 NumPy 或某些动态链接库常见原因是 Python 版本和包版本不匹配。优先尝试升级相关依赖包不要急着重装 Python。3. 先搞懂 Series 和 DataFrame后面才不会乱3.1 两个核心数据结构到底有什么区别Pandas 里最重要的两个对象是 Series 和 DataFrame。很多人一开始分不清其实只需要记住一句话Series 是一列带索引的数据DataFrame 是多个 Series 组成的表格。可以这样理解DataFrame 是一张 Excel 表Series 就是这张表中的某一列。你在 DataFrame 上做的很多操作本质上是逐列处理 Series。import pandas as pd # Series一列数据 s pd.Series([10, 20, 30], namescore) print(s) # DataFrame一张表 df pd.DataFrame({ name: [张三, 李四, 王五], score: [88, 92, 75] }) print(df)这个区别决定了很多操作方式。比如你要给某一列做计算实际上是在操作 Series你要查看多个字段之间的关系就需要回到 DataFrame 层面。3.2 创建 DataFrame 的常用方式和判断标准实际工作中你很少会手动创建 DataFrame更多是从文件或数据库读取。但新手阶段一定要手动创建几次因为这样能帮你理解 DataFrame 的结构。创建 DataFrame 的常见方式有三种传入字典键是列名值是列表传入列表的列表同时指定列名从 NumPy 数组转换import numpy as np df1 pd.DataFrame({a: [1, 2, 3], b: [4, 5, 6]}) data [[1, 4], [2, 5], [3, 6]] df2 pd.DataFrame(data, columns[a, b]) arr np.array([[1, 4], [2, 5], [3, 6]]) df3 pd.DataFrame(arr, columns[a, b])判断标准是创建后先打印结果确认行数、列名、索引是否符合预期。如果列数对不上优先检查数据源里的分隔符和缺失值标记。3.3 拿到数据后第一步操作是什么不管数据是自己创建的还是读取进来的第一步永远是“看”。我一般会依次执行这些操作# 查看前5行 df.head() # 查看行列数 df.shape # 查看列名和数据类型 df.info() # 查看数值型列的统计描述 df.describe()先执行info()你能立刻知道每一列的数据类型、有多少非空值。比如某列显示object类型后续可能要做类型转换某列非空数量明显少于总行数说明存在缺失值。这些信息是你后续所有决策的依据。注意head()默认查看前 5 行传参可以改成任意行数。不要一上来就print(df)把整个数据都打出来数据量大时既卡又看不出重点。4. 数据读取与输出各种格式的入口和出口4.1 CSV 读取的核心参数和常见坑CSV 是最常见的表格数据格式。read_csv参数很多但实际工作中高频使用的主要是这几个df pd.read_csv( data.csv, encodingutf-8, sep,, header0, dtype{id: str}, parse_dates[date] )encoding文件编码常见的有utf-8、gbk、gb2312。读取中文数据时如果报 UnicodeDecodeError就换编码试试。sep分隔符。CSV 不一定是逗号分隔也可能是制表符、分号读取前先打开文件看一眼。header哪一行是列名。默认第 0 行如果文件没有列名就设成None。dtype指定列的数据类型。比如身份证号、订单号这类列要设成字符串否则会被自动解析成数值导致精度丢失。parse_dates指定需要转换成日期的列。比较常见的坑是路径问题。Windows 下路径里的反斜杠要处理建议使用原始字符串或正斜杠。4.2 Excel 和数据库读取读取 Excel 文件需要额外安装openpyxl或xlrd依赖建议使用openpyxldf pd.read_excel(data.xlsx, sheet_nameSheet1)数据库读取也很常用。以 SQLite 为例import sqlite3 conn sqlite3.connect(database.db) df pd.read_sql_query(SELECT * FROM orders, conn) conn.close()读取数据库时我建议先写一条SELECT语句确认数据量不要直接全表读取。如果表特别大可以先加上LIMIT做小样本验证。4.3 输出和保存时的注意事项处理完数据后通常需要保存结果df.to_csv(output.csv, indexFalse, encodingutf-8-sig) df.to_excel(output.xlsx, indexFalse, sheet_nameresult)indexFalse不保存索引列。encodingutf-8-sig中文场景下推荐使用Excel 打开不会乱码。如果是多个结果表可以写到同一个 Excel 的不同 sheetwith pd.ExcelWriter(output.xlsx, engineopenpyxl) as writer: df1.to_excel(writer, sheet_name汇总, indexFalse) df2.to_excel(writer, sheet_name明细, indexFalse)保存后一定要重新读一次确认列名、行数、编码都正常。这个步骤很多人会跳过但恰恰是避免交付事故的关键。5. 数据清洗真实项目中最花时间的环节5.1 缺失值处理先判断再处理真实数据里缺失值几乎无法避免。处理缺失值的顺序很重要先看缺失情况再决定方案。# 查看每列缺失值数量 df.isnull().sum() # 查看缺失值占比 df.isnull().mean()常见处理方式有三种删除缺失值df.dropna()适合缺失值占比很小的情况填充固定值df.fillna(0)适合业务含义明确的场景填充统计值df[col].fillna(df[col].mean())适合数值型数据判断标准是删除之前先确认缺失值占比和业务含义。比如“用户年龄”缺失可能直接删除行“订单金额”缺失可能需要查上游数据而不是简单填 0。5.2 重复值处理判断标准比方法更重要热词里有一个很典型的场景如果两列的值均相同则取第一条数据。这在 Pandas 里就是drop_duplicates的典型用法。# 基于两个列判断重复保留第一条 df.drop_duplicates(subset[column1, column2], keepfirst)subset指定按哪些列判断重复。不指定时使用所有列。keep保留哪一条first保留第一条last保留最后一条False全部删除。处理重复值时最怕的不是重复而是不知道“重复”的业务定义。是先按用户 ID 去重还是按用户 ID 日期去重这个必须从业务出发。比如用户可能在同一天有多条操作记录它们不应该被当成重复值删掉。5.3 数据类型转换和字符串清洗数据类型转换是新手经常卡住的地方。常见的坑是一列数字里混入了空格、逗号、货币符号导致整列都变成object。# 先清理字符串中的符号 df[price] df[price].str.replace(,, ).str.replace(¥, ) # 再转成数值 df[price] pd.to_numeric(df[price], errorscoerce)errorscoerce表示转换失败时变成 NaN这样你就能看到哪些数据有问题。生产环境里不要直接把 errors 设为raise否则一条脏数据会让整个流程中断。字符串清洗常用的操作str.strip()去掉首尾空格str.replace()替换指定字符str.upper()/str.lower()统一大小写str.contains()判断是否包含某字符串str.extract()正则提取部分内容热词里的“pandas与numpy”在这里就派上用场了。astype只能处理简单转换复杂清洗往往需要pd.to_numeric、str.extract和 boolean 索引配合。6. 分组聚合与透视从明细数据到结论6.1 groupby 的底层逻辑拆分-应用-合并分组聚合是 Pandas 的核心操作也是数据分析从“看明细”到“出结论”的关键环节。groupby的逻辑可以拆成三步先按某一列拆分成多个组然后对每个组执行计算最后把结果合并成一张新的表。grouped df.groupby(category)[amount].sum()这行代码的意思是按category列分组每个组计算amount的和。结果是一个 Series索引是category值是每个组的求和结果。如果要对多个列用不同聚合方式可以这样result df.groupby(category).agg({ amount: sum, quantity: mean, order_id: count })agg的作用是同时指定多个聚合函数比多次groupby再合并高效得多。6.2 agg 和 transform 怎么选agg和transform的区别是很多人的知识盲区。agg把多个值压缩成一个值结果的索引是分组键适合生成汇总表。transform保持与原数据相同的行数适合把聚合结果映射回原表的每一行。举一个实际场景你想计算“每个用户下的订单金额占该用户总金额的比例”。这时用transform最方便df[user_total] df.groupby(user_id)[amount].transform(sum) df[percent] df[amount] / df[user_total]如果不理解transform你会绕很远的路甚至写出循环。Pandas 里那种“先自定义函数再用apply一行行处理”的做法在大数据量下速度会非常慢。6.3 透视表 pivot_table 和交叉表 crosstabpivot_table是 Excel 数据透视表的 Pandas 版本。它和groupby可以完成很多相同的工作但它的优势是能用更自然的方式同时展示行、列、值三个维度。pd.pivot_table( df, valuesamount, indexcategory, columnsregion, aggfuncsum, fill_value0 )values要计算的数值列index行方向的分组字段columns列方向的分组字段aggfunc聚合方式fill_value空值填充交叉表crosstab则适合统计频次pd.crosstab(df[category], df[region])使用透视表时要注意如果values列包含空值某些分组结果会是 NaN设置fill_value0可以避免后续计算出现意外。7. 多表合并与时间序列进阶操作的两个重点7.1 merge 和 concat 怎么选数据分析经常要处理多张表。Pandas 里两个核心方法merge和concat。merge按指定的列做连接类似于 SQL 里的 JOIN。concat按行或按列拼接类似于把一个表上下堆叠或左右并排。# 按用户ID合并订单表和用户表 orders.merge(users, onuser_id, howleft) # 上下拼接两张结构相同的表 pd.concat([df1, df2], axis0, ignore_indexTrue)how参数的判断逻辑inner只保留两边都有的键left保留左表全部右表没有的部分填 NaNright保留右表全部左表没有的部分填 NaNouter保留两边全部合并时最常见的坑是键列的数据类型不一致。比如一张表里user_id是 int另一张表里是 str合并结果就会全是 NaN。这时需要先统一类型orders[user_id] orders[user_id].astype(str) users[user_id] users[user_id].astype(str)7.2 时间序列处理的基本操作时间序列在热词里出现频率很高比如项目里要按周、按月统计销售数据。时间序列处理的第一步是转换日期格式df[date] pd.to_datetime(df[date])转换完成后就可以设置索引并按时间维度取样df df.set_index(date) # 按月统计 monthly df.resample(M)[amount].sum() # 按周统计 weekly df.resample(W)[amount].sum()时间格式的常用说明D按天W按周M按月Q按季度Y/A按年时间序列处理里还有一个容易忽略的问题时区。如果你的数据来自不同地区最好统一先转成无时区的标准时间再按业务需求转换。8. 实战小项目把学到的内容串起来8.1 一个典型的数据分析任务假设你拿到一份电商订单明细包含订单号、用户ID、下单日期、商品分类、商品金额、商品数量、所在地区等字段。现在的需求是清洗数据检查缺失值和重复值计算每个商品分类的总销售额按地区统计订单量和平均客单价按月统计总销售额趋势导出结果表这个任务几乎覆盖了 Pandas 的核心操作读取、清洗、分组、透视、时间序列、导出。8.2 完整流程示例import pandas as pd # 1. 读取数据 df pd.read_csv(orders.csv, encodingutf-8, parse_dates[order_date]) # 2. 查看基本信息 print(df.info()) print(df.isnull().sum()) # 3. 处理缺失值金额为空则删除地区为空则填充为“未知” df df.dropna(subset[amount]) df[region] df[region].fillna(未知) # 4. 删除基于订单号的重复记录 df df.drop_duplicates(subset[order_id]) # 5. 分类销售额 category_sales df.groupby(category)[amount].sum().sort_values(ascendingFalse) print(category_sales) # 6. 地区维度统计 region_stats df.groupby(region).agg( order_count(order_id, count), avg_amount(amount, mean) ).reset_index() print(region_stats) # 7. 月度销售趋势 monthly_trend df.set_index(order_date).resample(M)[amount].sum() print(monthly_trend) # 8. 导出 category_sales.to_csv(category_sales.csv, encodingutf-8-sig) region_stats.to_csv(region_stats.csv, indexFalse, encodingutf-8-sig) monthly_trend.to_csv(monthly_trend.csv, encodingutf-8-sig)这段代码就是这套教程学习路径的缩影。你在动手练习时不要只抄代码要逐步理解每一条语句在做什么。如果某个步骤的结果和预期不一致先打印中间结果再定位问题。8.3 完成标准完成这个项目后可以用几个问题自测你知道info()输出里每一列的类型和非空数量代表什么吗你能解释为什么drop_duplicates前要先确定业务上的重复定义吗你能说明groupby之后为什么结果有可能不是 DataFrame 吗你能根据数据选择使用groupby还是pivot_table吗你能在合并两张表遇到 NaN 时快速判断是类型问题还是键值问题吗如果这些问题都能回答清楚说明这套教程的核心内容你已经掌握了。9. 高频报错与排查思路9.1 几个最常见报错及原因用 Pandas 过程中新手会遇到几个高频错误这里单独说明UnicodeDecodeError文件编码不对。尝试改encodinggbk或encodingutf-8。KeyError列名不存在。用df.columns查看真实列名注意空格和大小写。SettingWithCopyWarning链式赋值的警告。优先使用.loc明确修改而不是先切片再赋值。ValueError在 merge 或 concat 时传入的对象类型或列名不对。先确认要合并的表里键列的类型是否一致。MemoryError数据量过大内存不足。用read_csv的usecols参数只读取需要的列或用分块读取。9.2 通用排查顺序遇到报错时不要一上来就改代码。我推荐的排查顺序是先看报错信息的第一行判断是 IO 错误、类型错误还是索引错误。打印相关变量的dtypes和columns确认数据类型和列名。缩小范围用一个小 DataFrame 复现问题逐步增加条件。检查前后操作的输出格式groupby的结果是 Series 还是 DataFramemerge之后是否有重复列。最后再验证参数如果你的代码涉及合并、连接或聚合重点检查键列的类型和唯一性。注意很多报错看起来是 Pandas 的问题实际是数据源的问题。比如某列偶尔混入字符串、某些行有换行导致列错位、文件里存在 BOM 头等。先用head()和tail()看原始数据再定位代码逻辑。9.3 性能问题数据量大时怎么办如果数据量达到数百万行Pandas 的性能会出现下降。常见的优化方向有使用dtype指定列类型避免把数值列读成 object用usecols只读取需要的列优先使用向量化操作避免循环和apply合并前先缩小数据或者在数据源层面把需要的字段过滤掉考虑使用category类型处理重复值较多的字符串列热词里提到“pandas与numpy实现spark在格式parquet及语言feather等上的案例操作”这属于大数据场景的扩展。Pandas 支持读取 Parquet 和 Feather 格式这两种格式比 CSV 更快、更省空间。如果是超大数据集可以先把 CSV 转成 Parquetdf.to_parquet(data.parquet) df pd.read_parquet(data.parquet)在百万行以下的数据场景里Pandas 完全够用。到了千万行以上才需要考虑分块处理或 Spark。10. 学习建议怎样才算真正学会 Pandas10.1 先跑通再理解我的建议是不要一上来就硬背参数表。先把教程里的代码敲一遍看到输出结果理解每一步的作用然后再回头看函数文档。参数记不住很正常遇到需求时去查文档就可以了。真正重要的是遇到问题时知道该找哪个方向而不是每次都从零开始搜“Pandas 怎么做”。10.2 用真实项目代替看视频“2小时速通”的说法确实能快速带你入门但真正的提升一定来自实战。你可以自己去公开数据集平台找一份感兴趣的数据比如销售数据、电影数据、天气数据然后完成一整套分析数据清洗、统计描述、分组聚合、时间趋势、结果导出。过程中你会遇到各种教程里没提到的问题这些问题才是你真正学会 Pandas 的台阶。10.3 学会查文档和看报错Pandas 官方文档非常详细Stack Overflow 和各类社区也有大量案例。遇到报错时先把报错信息完整读一遍再把关键变量打印出来对照大多数问题都能自己解决。如果实在解决不了找一个最小复现案例再去搜索引擎提问这样效率最高。我的经验是卡住的时候不要反复改参数先确认三件事数据格式对不对、列名对不对、操作之后的数据结构是什么。把这三个问题搞清楚大部分坑都能绕过去。最后留一个小提醒学完 Pandas 并不等于学会数据分析它只是工具层。真正的分析能力还包括业务理解、统计思维和结果表达。把工具用熟之后可以进一步学 NumPy、Matplotlib、Seaborn、SQL再对接实际业务场景这条路才算完整。
返回列表