Python入门之使用pandas分析excel数据
前言对刚接触 Python 的人来说最实用的第一个脚本往往是读一个 Excel、做点统计、 再输出结果。pandas 让这件事变得很短读进来是一个DataFrame 之后的行列操作都围绕它展开。不过有两件事要先交代。第一pandas 是第三方库读.xlsx还需要一个引擎 通常是openpyxl所以要pip install pandas openpyxl。 第二本文的运行环境里没有 Python 解释器、没有 pandas示例无法运行验证 只能逐行人工推演。参数细节以 Pandas 官方文档为准。一、读进来先看清楚# pandas 1.0需 pip install pandas openpyxlimport pandas as pddf pd.read_excel(sales.xlsx, sheet_name0) # 默认读第一个工作表print(df.shape) # (行数, 列数)print(df.columns) # 列名print(df.head()) # 前 5 行几个看一眼的入口入门阶段务必先都过一遍方法作用df.shape行列数df.head(n)/df.tail(n)前/后 n 行df.columns列名列表df.dtypes每列类型df.info()行列数、类型、非空个数df.describe()数值列的统计摘要df.info()特别值得先看它一次告诉你每列有多少非空值缺失情况一目了然。df.describe()默认只统计数值列给出计数、均值、标准差、最小最大值和四分位数 传includeall还能把类别列也一并统计进来。注意read_excel的参数名是sheet_name不是旧版的sheetname。 一个 Excel 有多个工作表时可传表名或传sheet_nameNone一次读全部并得到字典。二、挑出你关心的行和列# pandas 1.0df[金额] # 取一列返回 Seriesdf[[城市, 金额]] # 取多列返回 DataFramedf[df[金额] 1000] # 按条件筛行df.loc[df[城市] 北京, 金额] # 按条件取某列要点取一列用单方括号得到Series取多列要写双层方括号。条件筛选用布尔序列多个条件用、|连接且每个条件都要加括号因为位运算符的优先级高于比较运算符。按标签取值用.loc按位置取值用.iloc。前者按行/列的名字后者按从 0 开始的序号且.iloc的切片不含结束位置——和 Python 列表一致。# pandas 1.0subset df[(df[金额] 1000) (df[城市] 北京)]三、做几个常用统计# pandas 1.0print(df[金额].sum()) # 合计print(df[金额].mean()) # 平均print(df[城市].value_counts()) # 每个城市出现次数print(df.sort_values(金额, ascendingFalse).head(10)) # 金额前 10value_counts()用来数类别频次特别好用返回的是值—次数的Series 默认按次数从多到少排。sort_values按某列排序ascendingFalse表示降序。Excel 里最常见的情况是某一列有空单元格。pandas 把它读成缺失值 先用下面两行摸清情况再决定怎么处理# pandas 1.0print(df.isna().sum()) # 每列缺了多少个print(df.isna().mean()) # 每列缺失的比例isna()返回布尔矩阵.sum()数个数、.mean()算比例。 判定缺失只能用isna()/notna()不要用 None或 numpy.nan 因为浮点缺失值NaN连自己都不等于自己永远筛不出来。四、简单分组汇总# pandas 1.0by_city df.groupby(城市, as_indexFalse)[金额].sum()print(by_city)groupby(城市)[金额].sum()的含义是按城市分组后对金额求和。 默认分组键会变成结果的索引加as_indexFalse可让它保持为普通列 后续写 Excel 时更省心。分组这一步很容易和另外两个操作搞混这里顺手分清想做的事该用的方法按城市算总额groupby(城市)[金额].sum()按城市和月份两个维度groupby([城市, 月份])[金额].sum()去重df.drop_duplicates()改列名df.rename(columns{旧: 新})drop_duplicates()默认按整行判断重复只想按某几列去重传subset[城市]。五、结果写出去# pandas 1.0by_city.to_excel(城市汇总.xlsx, indexFalse)indexFalse避免把行号也写进文件。若要在同一个 Excel 里放多张表 用pd.ExcelWriter作为上下文管理器给每次to_excel传不同的sheet_name。 写多个表时务必用with否则文件可能没被正确保存# pandas 1.0with pd.ExcelWriter(结果.xlsx, engineopenpyxl) as writer:by_city.to_excel(writer, sheet_name按城市, indexFalse)df.head(50).to_excel(writer, sheet_name样例, indexFalse)关于类型还有一点新手常问为什么读进来的编号是1001做一次筛选后就 变成了1001.0原因是那一列里存在空单元格pandas 为了让缺失值有位置可放 把整列从int64提升成了float64。想让整数仍是整数可以先把缺失填上 或改用可空整数类型Int64。六、一个完整的入门脚本# pandas 1.0需 pip install pandas openpyxlimport pandas as pddef analyze(path: str) - pd.DataFrame:df pd.read_excel(path, sheet_name0)# 1) 先看清结构print(df.shape)print(df.info())print(df.describe())# 2) 处理一下空值数值列按 0 填df[金额] df[金额].fillna(0)# 3) 按城市汇总并降序排列result (df.groupby(城市, as_indexFalse).agg(总额(金额, sum), 笔数(金额, size)).sort_values(总额, ascendingFalse))return resultif __name__ __main__:summary analyze(sales.xlsx)print(summary)summary.to_excel(城市汇总.xlsx, indexFalse)常见坑点读 Excel 忘了装引擎❌ 只pip install pandas就pd.read_excel(a.xlsx)报缺少 openpyxl ✅ 先pip install openpyxl写.xlsx同样需要它参数名写成旧版的sheetname❌pd.read_excel(a.xlsx, sheetnameSheet1)✅pd.read_excel(a.xlsx, sheet_nameSheet1)取多列只写一层方括号❌df[城市, 金额]被当成一个元组键直接 KeyError ✅df[[城市, 金额]]双层方括号才是多列多条件筛选忘了加括号❌df[df[金额] 1000 df[城市] 北京] 位运算优先级导致逻辑错乱甚至报错 ✅df[(df[金额] 1000) (df[城市] 北京)]整数列有空值后变成小数❌ 金额列里有个空单元格整列变float64整数显示成3.0✅ 这是正常现象先fillna(0)或用dtypeInt64groupby后按列名取不到分组键❌result[城市]报 KeyError因为城市变成了索引 ✅ 加as_indexFalse或事后reset_index()写 Excel 时行号也写进去了❌ 结果表第一列多出一列 0,1,2 的索引 ✅to_excel(out.xlsx, indexFalse)总结阶段常用方法读取read_excel(sheet_name)看数据shape/head/info/describe选取df[[...]]、布尔筛选、loc/iloc统计sum/mean/value_counts/sort_values汇总groupby(...).agg(...)输出to_excel(indexFalse)入门阶段记住一个顺序就够了先看shape/info/describe→ 再选筛选、取列 → 后算统计、分组→ 最后写to_excel。把这条链路跑顺 再逐步学缺失值处理和合并就水到渠成了。

相关新闻

Druid连接池密码加密实战:yml配置与安全加固

Druid连接池密码加密实战:yml配置与安全加固

1. 为什么要在连接池层面做密码加密数据库密码明文写在配置文件里,这件事在中小项目里几乎是默认操作。我见过太多项目,application.yml里password: root123就这么躺着,代码提交到仓库,谁有权限谁就能看到生产库的账号密码。等到某…

2026/10/16 18:02:40 阅读更多 →
多径信道仿真:建模、参数设置与避坑指南

多径信道仿真:建模、参数设置与避坑指南

简介:在无线通信中,多径效应导致信号衰落、时延扩展与频率选择性衰落,直接影响系统性能。这份MATLAB仿真程序包面向无线通信初学者与课程设计人员,覆盖信道建模、调制传输、接收均衡与性能评估的完整链路。压缩包为RAR格式&#x…

2026/10/16 18:01:39 阅读更多 →
第一次跑 XERJ 的翻车现场:索引、端口、密钥五个坑

第一次跑 XERJ 的翻车现场:索引、端口、密钥五个坑

第一次跑 XERJ 的翻车现场:索引、端口、密钥五个坑 【免费下载链接】xerj XERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, …

2026/10/16 18:01:39 阅读更多 →

最新新闻

AI-native芯片设计:稀缺能力与工程落地

AI-native芯片设计:稀缺能力与工程落地

1. 从“AI设计芯片”这个说法说起“AI-native 芯片设计”这个词最近被讨论得很多,起因是某头部研究机构发布了一篇关于用 AI 辅助甚至主导芯片设计流程的研究。消息传开之后,各种解读铺天盖地,有人说“芯片设计师要失业了”,有人说…

2026/10/16 18:40:27 阅读更多 →
接口数据加密传输实战:混合加密、AES-GCM与密钥运维全解析

接口数据加密传输实战:混合加密、AES-GCM与密钥运维全解析

前阵子评审一个内部系统的对接方案,对方负责人的原话是:“我们这两个后端服务都在同一个内网里,数据一般不会被人看到,接口文档也写了脱敏。”我当时没有反驳,但心里清楚,这种“以为安全”的状态才是最容易…

2026/10/16 18:40:26 阅读更多 →
Logo检测不是OCR:4种视觉方案选型指南

Logo检测不是OCR:4种视觉方案选型指南

1. 项目概述:这不是在做“文字识别”,而是在解决一个视觉语义判断问题“如何OCR识别图片中是否有logo?”——这个标题乍看有点矛盾,甚至带点误导性。OCR(Optical Character Recognition)本质是识别图像中的…

2026/10/16 18:40:26 阅读更多 →
EL表达式与JSTL标签库:从JSP Scriptlet到优雅视图层的实战改造指南

EL表达式与JSTL标签库:从JSP Scriptlet到优雅视图层的实战改造指南

学习 Java Web 到了第 36 天&#xff0c;说实话我有点拖延&#xff0c;因为这一篇要写的东西太基础了。基础到很多人都默认会用&#xff0c;但真到接手项目的时候&#xff0c;又会看到满屏的<% %>把 JSP 页面搅得一团糟。EL 表达式和 JSTL 标签库就是专门用来解决这个问题…

2026/10/16 18:40:26 阅读更多 →
SpringMVC工作流程详解:从请求到响应,用流程图定位问题

SpringMVC工作流程详解:从请求到响应,用流程图定位问题

SpringMVC 的工作流程&#xff0c;大概是 Java 后端面试里出现频率最高的问题&#xff0c;也是很多开发者“背得下来却用不上”的问题。我在实际排查问题的时候发现&#xff0c;真正能把流程图当成调试地图的人&#xff0c;处理起 404、400、参数丢失、视图路径错误这类问题会快…

2026/10/16 18:40:26 阅读更多 →
60-【2027毕设】YOLO11羊群计数统计系统 - Python完整源码+PyQt5界面+训练模型+数据集

60-【2027毕设】YOLO11羊群计数统计系统 - Python完整源码+PyQt5界面+训练模型+数据集

&#x1f4cc; 项目概览 本项目基于深度学习框架&#xff0c;实现了一套完整的检测识别系统。系统集成了多种主流YOLO算法版本&#xff0c;配合PyQt5构建的可视化交互界面&#xff0c;提供了从数据标注、模型训练到在线推理的全流程解决方案。以下是项目的核心技术栈和资源构成…

2026/10/16 18:39:25 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课&#xff0c;其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置&#xff0c;通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测&#xff0c;本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章&#xff0c;跟着敲完了投票应用&#xff0c;大概会有一种"我好像会了&#xff0c;又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型&#xff0c;下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →