Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)
问题介绍(ffill填充存在的问题)
在pandas读取excel经常会遇到合并单元格的问题。例如:
此时使用pandas读取到的内容为:
如果去百度,几乎所有人会说应该用如下代码:
df['班级'] = df['班级'].ffill()
这样看起来没问题,但是,该解决方案并不能适用于所有场景,甚至会造成数据错误。
例如:
对班级和备注填充后:
孙武空本来是数据缺失,现在被错误的标记成了挂科数据。
再例如:
对所有列填充后:
同样存在大量数据或错误数据。
正确填充方式
思路:① 使用openpyxl将合并单元格拆分,生成中间文件 ② 读取中间文件
第一步,使用如下工具类生成拆分单元格并生成中间文件:
import openpyxl# 拆分所有的合并单元格,并赋予合并之前的值。
# 由于openpyxl并没有提供拆分并填充的方法,所以使用该方法进行完成
def unmerge_and_fill_cells(worksheet):all_merged_cell_ranges = list(worksheet.merged_cells.ranges)for merged_cell_range in all_merged_cell_ranges:merged_cell = merged_cell_range.start_cellworksheet.unmerge_cells(range_string=merged_cell_range.coord)for row_index, col_index in merged_cell_range.cells:cell = worksheet.cell(row=row_index, column=col_index)cell.value = merged_cell.value# 读取原始xlsx文件,拆分并填充单元格,然后生成中间临时文件。
def unmerge_cell(filename):wb = openpyxl.load_workbook(filename)for sheet_name in wb.sheetnames:sheet = wb[sheet_name]unmerge_and_fill_cells(sheet)filename = filename.replace(".xls", "_temp.xls")wb.save(filename)wb.close()# openpyxl保存之后,再用pandas读取会存在公式无法读取到的情况,使用下面方式就可以了# 如果你的excel不涉及公式,可以删除下面内容# 原理为:使用windows打开excel,然后另存为一下from win32com.client import DispatchxlApp = Dispatch("Excel.Application")xlApp.Visible = FalsexlBook = xlApp.Workbooks.Open(str(Path(".").absolute() / filename)) # 这里必须填绝对路径xlBook.Save()xlBook.Close()return filenameif __name__ == '__main__':unmerge_cell("test.xlsx")
拆分后的sheet页如图:
然后再使用pandas读取中间文件即可:
import pandas as pddf = pd.read_excel("test_temp.xlsx")
结果为:
Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)相关推荐
- 如何读取Excel表格中不同sheet表的同一位置单元格数据,并绘制条形图呢?
作者 | 黄伟呢 来源 | 数据分析与统计学之美 今天,有位朋友在群里面咨询了一个问题:如何读取Excel表格中"不同sheet表"的同一位置单元格数据,并绘制条形图呢? 有人提议 ...
- 表头让你头疼?看这几招解决Pandas读取Excel表头的问题
在数据分析工作中,我们经常需要读取Excel数据.但是当Excel表格中存在多级表头或合并单元格时,使用Pandas读取数据就会出现错误,无法准确识别表头.在此分享几个解决这个问题的实用方法,希望能帮 ...
- pandas读取Excel判断指定列是否有空值
一.简介 有时我们用pandas读取Excel去获取某列或者某几列的值,并对该列的值进行处理时,一般都会先判断该列是否有空值,若有空值对其进行处理后再让程序往下走,否则不做判断可能程序会报错,比如用正 ...
- Python使用pandas读取Excel文件多个WorkSheet的数据并绘制柱状图和热力图
问题描述:在当前文件夹中有一个存放同一门课程两个班级同学成绩的Excel文件"学生成绩.xlsx",每个工作表中存放一个班级的成绩.编写程序,使用pandas读取其中的数据,然后绘 ...
- Python+Pandas读取Excel文件分析关系最好的两个演员
董老师又双叒叕送书啦,6本<Python程序设计基础与应用(第2版)> 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国 ...
- Python+pandas读取Excel文件统计最受欢迎的前3位演员
推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社,2018.8出版,2021.3第11次印刷 图书详情: 配套资源: 用书教师可 ...
- Python使用pandas读取Excel文件数据和预处理小案例
假设有Excel文件data.xlsx,其中内容为 现在需要将这个Excel文件中的数据读入pandas,并且在后续的处理中不关心ID列,还需要把sex列的female替换为1,把sex列的male替 ...
- python pandas读取excel时动态确定标题行所在行数
python pandas读取excel时动态确定标题行所在行数,动态跳过标题前空白行 利用python对excel或者csv文件进行批量操作时,除了使用xlrd库或者xlwt库进行表格的操作读与写, ...
- pandas 读取excel文件
pandas 读取excel文件 一 read_excel() 的基本用法 二 read_excel() 的常用的参数: 三 示例 1. IO:路径 2. sheet_name:指定工作表名 3. h ...
最新文章
- 路由个数据包转发简介
- 开源you-get项目爬虫,以及基于python+selenium的自动测试利器
- Linux Shell特殊字符和控制字符
- 性能测试的重要意义(一)
- DevExpress v18.1新版亮点——WPF篇(五)
- 思维导图网页版、临时使用推荐工具——画图本
- C++普通类继承模版类demo
- java Context类
- Docker系列(二)Docker安装与启动
- 单变量分析、组合变量分析
- OAuth2认证授权流程解析
- ubuntu英伟达显卡驱动
- 角动量守恒与陀螺力矩
- springboot validation详解
- php与elasticsearch视频,PHP如何与搜索引擎Elasticsearch交互?
- GOlang中对flag.Prase()的疑问
- android 实现微信朋友圈文字收起与全文显示功能
- 使用lupdate生成Qt的ts翻译文件
- 发现一个多地区 ping 网址的工具,岂止一个“牛”字了得
- Houdini abcobj 导入 Maya