当前位置:首页 » 《随便一记》 » 正文

Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

8 人参与  2023年03月31日 16:09  分类 : 《随便一记》  评论

点击全文阅读


问题介绍(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_cell        worksheet.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 Dispatch    xlApp = Dispatch("Excel.Application")    xlApp.Visible = False    xlBook = 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")

结果为:

在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/57609.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 林语熙周晏京(离婚后,老公天天跪求复合全集阅读)最新章节免费在线阅读_《离婚后,老公天天跪求复合全集阅读》最新热门小说 -
  • 顾绫雪嬴政《被始皇读心后,文武百官卷疯了!完结版阅读》完整版免费在线阅读_(顾绫雪嬴政)全集免费阅读 -
  • 情深意长皆成空完整版阅读(沈卿林砚辞)抖音热文_《情深意长皆成空完整版阅读》最新章节免费在线阅读 -
  • 姐姐为暴富重伤傅家金孙后火葬场了全集阅读小说(傅延江瑶)全文免费阅读无弹窗大结局_(姐姐为暴富重伤傅家金孙后火葬场了全集阅读免费阅读全文大结局)最新章节列表_笔趣阁(姐姐为暴富重伤傅家金孙后火葬场了全集阅读) -
  • 乔以诺萧瑾淮(不是你好是我好全集阅读)精彩试读_《不是你好是我好全集阅读》全本阅读 -
  • 白月光双双《重生后我成全老公和白月光,他却急了全集》全文免费阅读无弹窗大结局_(白月光双双)最新章节免费在线阅读 -
  • 苏小枫苏末小说免费笔趣阁_苏小枫苏末小说全章完本大结局
  • 死遁后他疯了最新小说全文阅读_最新免费小说沈轻洲林梦江之雪_完本小说(死遁后他疯了)
  • 免费小说《顾里宋婷婷小岳欧颖倩》已完结(顾里宋婷婷小岳欧颖倩)热门小说大结局全文阅读笔趣阁
  • 侄子为求富贵,变性后全家后悔最新小说_免费小说全文阅读(苏小枫苏末)_侄子为求富贵,变性后全家后悔苏小枫苏末小说推荐完结
  • 最新《沈轻洲林梦江之雪》小说(全集完整新上小说大结局(沈轻洲林梦江之雪))全文阅读笔趣阁
  • 拒绝嫁给姐夫后,我在八零年代暴富了(陈小棠沈正韩)阅读 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1