问题介绍(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合并单元格拆分并填充内容)相关推荐

  1. 如何读取Excel表格中不同sheet表的同一位置单元格数据,并绘制条形图呢?

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 今天,有位朋友在群里面咨询了一个问题:如何读取Excel表格中"不同sheet表"的同一位置单元格数据,并绘制条形图呢? 有人提议 ...

  2. 表头让你头疼?看这几招解决Pandas读取Excel表头的问题

    在数据分析工作中,我们经常需要读取Excel数据.但是当Excel表格中存在多级表头或合并单元格时,使用Pandas读取数据就会出现错误,无法准确识别表头.在此分享几个解决这个问题的实用方法,希望能帮 ...

  3. pandas读取Excel判断指定列是否有空值

    一.简介 有时我们用pandas读取Excel去获取某列或者某几列的值,并对该列的值进行处理时,一般都会先判断该列是否有空值,若有空值对其进行处理后再让程序往下走,否则不做判断可能程序会报错,比如用正 ...

  4. Python使用pandas读取Excel文件多个WorkSheet的数据并绘制柱状图和热力图

    问题描述:在当前文件夹中有一个存放同一门课程两个班级同学成绩的Excel文件"学生成绩.xlsx",每个工作表中存放一个班级的成绩.编写程序,使用pandas读取其中的数据,然后绘 ...

  5. Python+Pandas读取Excel文件分析关系最好的两个演员

    董老师又双叒叕送书啦,6本<Python程序设计基础与应用(第2版)> 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国 ...

  6. Python+pandas读取Excel文件统计最受欢迎的前3位演员

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社,2018.8出版,2021.3第11次印刷 图书详情: 配套资源: 用书教师可 ...

  7. Python使用pandas读取Excel文件数据和预处理小案例

    假设有Excel文件data.xlsx,其中内容为 现在需要将这个Excel文件中的数据读入pandas,并且在后续的处理中不关心ID列,还需要把sex列的female替换为1,把sex列的male替 ...

  8. python pandas读取excel时动态确定标题行所在行数

    python pandas读取excel时动态确定标题行所在行数,动态跳过标题前空白行 利用python对excel或者csv文件进行批量操作时,除了使用xlrd库或者xlwt库进行表格的操作读与写, ...

  9. pandas 读取excel文件

    pandas 读取excel文件 一 read_excel() 的基本用法 二 read_excel() 的常用的参数: 三 示例 1. IO:路径 2. sheet_name:指定工作表名 3. h ...

最新文章

  1. 路由个数据包转发简介
  2. 开源you-get项目爬虫,以及基于python+selenium的自动测试利器
  3. Linux Shell特殊字符和控制字符
  4. 性能测试的重要意义(一)
  5. DevExpress v18.1新版亮点——WPF篇(五)
  6. 思维导图网页版、临时使用推荐工具——画图本
  7. C++普通类继承模版类demo
  8. java Context类
  9. Docker系列(二)Docker安装与启动
  10. 单变量分析、组合变量分析
  11. OAuth2认证授权流程解析
  12. ubuntu英伟达显卡驱动
  13. 角动量守恒与陀螺力矩
  14. springboot validation详解
  15. php与elasticsearch视频,PHP如何与搜索引擎Elasticsearch交互?
  16. GOlang中对flag.Prase()的疑问
  17. android 实现微信朋友圈文字收起与全文显示功能
  18. 使用lupdate生成Qt的ts翻译文件
  19. 发现一个多地区 ping 网址的工具,岂止一个“牛”字了得
  20. Houdini abcobj 导入 Maya

热门文章

  1. 微软输入法中文输入状态下标点符号变英文了怎么改回来?(ctrl+.)
  2. 用Python制作个小表情
  3. Codeforces1139E Maximize Mex - 二分图匹配 - 动态加边
  4. Linux 安装svn
  5. Linux学习之用户、组和权限管理
  6. 如何关闭华为自动杀进程_苹果产品如何关闭烦人的自动更新
  7. 让make最快速度的编译
  8. 一条推荐的DS学习之路(for面试)
  9. python中@详解
  10. 物质、能量、信息:自然界的三大要素