当前位置: 首页 > news >正文

Pandas处理Excel文件的实用指南 - Python开发技巧XI

        处理Excel文件是数据分析师日常工作中的常见任务之一。

        幸运的是,Python的Pandas库提供了一套强大的工具,使得读取、处理和写入Excel文件变得既清晰又快捷。

        在本篇博客中,我们将探讨如何使用Pandas的 read_excel 方法来读取Excel文件,以及如何遍历和修改DataFrame中的数据。


安装

openpyxl是因为pandas读完excel需要。

pip install openpyxl 
pip install pandas

读取

导入Pandas库,并使用 read_excel 方法来读取Excel文件。需要注意的是,对于 .xlsx 文件,我们需要指定 engine='openpyxl'(默认xlrd),因为Pandas需要一个额外的库来处理这种格式的文件。

字段格式的锁定可以使用 dtype,

锁定sheet可以使用 sheet_name。

import pandas as pddf_map = pd.read_excel(io="excels/xxx.xlsx",engine='openpyxl')
# len(df_map)  # 读取df的行数据# 有时,excel里的字符串型数字,在read_excel读取时可能会被识别成int整型,这时候可以设置dtype:
df_map = pd.read_excel(io="excels/xxx.xlsx",dtype={'列字段A': str},engine='openpyxl'
)# 锁定sheet有两种方式,比如第二个sheet名称为sheet2
#(1)索引式,索引从零开始
df_map = pd.read_excel(io="excels/xxx.xlsx",engine='openpyxl',sheet_name=1 
)
#(2)直接sheet名称(推荐)
df_map = pd.read_excel(io="excels/xxx.xlsx",engine='openpyxl',sheet_name='sheet2'
)

遍历DataFrame

        Pandas的DataFrame对象提供了 iterrows() 方法,允许我们遍历DataFrame中的每一行。在遍历过程中,index 代表行索引,而 row 代表行内容。

for index, row in df_map_kpi.iterrows():if not pd.isnull(row["列字段A"]):  # isnull判断是否为空,不能直接用Python对象判空形式print(row["列字段A"])    else:df_map.at[index, "列字段A"] = "A"  # 修改改行某行数据

        例子中,检查了 "列字段A" 是否为空。如果不为空,打印出该值;如果为空,我们将其设置为 "A"(还未实际生效)。

        同时判断多列是否同时都为空或有一个为空。

row_list = [row["列字段A"], row["列字段B"], row["列字段C"]]
# 是否全部为空
pd.isnull(row_list).all()
# 是否有一个为空
pd.isnull(row_list).any()

写回Excel文件

通常会设置 index=False 来防止将行索引写入文件

# 将修改后的DataFrame写回Excel文件(这里使修改生效)
df.to_excel('excels/xxx.xlsx', index=False)

Pandas是一个功能强大的数据处理工具,帮助高效地处理Excel文件。无论是读取数据、遍历DataFrame还是写入更改,Pandas都能提供简洁的解决方案。

相关文章:

  • import sys是什么
  • AR 自回归模型
  • Spring Boot项目中集成连接池及部分细节说明
  • 【开源】JAVA+Vue.js实现大学兼职教师管理系统
  • CodeFuse新开源模型荣登Big Code评测榜首!
  • MySQL原理(三)锁定机制
  • HarmonyOS 鸿蒙驱动消息机制管理
  • Python与ArcGIS系列(二十)GDAL之合并shp和geojson要素图层
  • 安装好IntelliJ IDEA点击无反应,如何解决配置文件不一致导致的启动问题
  • Linux之快速入门(CentOS 7)
  • day38_MySQL
  • 宝塔控制面板配置SSL证书实现网站HTTPS
  • ARCGIS PRO SDK 常用的选择操作
  • 前端颜料盘??
  • .net访问oracle数据库性能问题
  • [NodeJS] 关于Buffer
  • Fabric架构演变之路
  • JS数组方法汇总
  • linux学习笔记
  • mockjs让前端开发独立于后端
  • Object.assign方法不能实现深复制
  • 浮现式设计
  • 猴子数据域名防封接口降低小说被封的风险
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 提醒我喝水chrome插件开发指南
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 项目管理碎碎念系列之一:干系人管理
  • 责任链模式的两种实现
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Java数据解析之JSON
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (2015)JS ES6 必知的十个 特性
  • (HAL库版)freeRTOS移植STMF103
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (十一)图像的罗伯特梯度锐化
  • (四)JPA - JQPL 实现增删改查
  • (转) Face-Resources
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net反编译工具
  • .net实现客户区延伸至至非客户区
  • .NET中统一的存储过程调用方法(收藏)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [BJDCTF2020]The mystery of ip
  • [daily][archlinux][game] 几个linux下还不错的游戏