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

这篇具有很好参考价值的文章主要介绍了Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题介绍(ffill填充存在的问题)

在pandas读取excel经常会遇到合并单元格的问题。例如:

pandas读取excel合并单元格,Python,pandas,excel,python

此时使用pandas读取到的内容为:

pandas读取excel合并单元格,Python,pandas,excel,python

如果去百度,几乎所有人会说应该用如下代码:

df['班级'] = df['班级'].ffill()

pandas读取excel合并单元格,Python,pandas,excel,python

这样看起来没问题,但是,该解决方案并不能适用于所有场景,甚至会造成数据错误。


例如:

pandas读取excel合并单元格,Python,pandas,excel,python 对班级和备注填充后: pandas读取excel合并单元格,Python,pandas,excel,python

孙武空本来是数据缺失,现在被错误的标记成了挂科数据。


再例如:

pandas读取excel合并单元格,Python,pandas,excel,python 对所有列填充后:pandas读取excel合并单元格,Python,pandas,excel,python

同样存在大量数据或错误数据。

正确填充方式

思路:① 使用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 filename

if __name__ == '__main__':
    unmerge_cell("test.xlsx")

拆分后的sheet页如图:

pandas读取excel合并单元格,Python,pandas,excel,python

然后再使用pandas读取中间文件即可:

import pandas as pd

df = pd.read_excel("test_temp.xlsx")

结果为:

pandas读取excel合并单元格,Python,pandas,excel,python文章来源地址https://www.toymoban.com/news/detail-779308.html

到了这里,关于Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决pandas读取excel单元格出错_x0000_

    如果已经读出来了这个问题,那么就只能使用 replace 替换了: 这是因为pandas解析excel的 .xlsx 文件时,使用的引擎是openpyxl,而有些情况下因为excel文件修修改改,导致有些编码格式被遗留在了excel单元格中,会在使用openpyxl时出现意外

    2024年02月11日
    浏览(48)
  • elementUI中table单元格的合并,通用版

    之前曾发布过一篇文章关于单元格合并问题,但是通用性很差,切代码较长不美观,改进之后分享给大家,我这里使用的是vue3,vue2的小伙伴稍微改动一下即可 如图:合并前  想要效果:  话不多说直接上代码教大家!!! 1.定义两个变量 2.定义编写合并逻辑的方法 3.调用 4

    2024年02月15日
    浏览(52)
  • vue前端docx库生成word表格 并合并单元格的例子

            Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面和单页应用程序。在Vue中生成Word表格并合并单元格,通常需要使用额外的库,如`docx`,它是一个用于创建和修改Word文档(`.docx`)的JavaScript库。         以下是一个使用Vue.js和`docx`库来生成Word文档并合并

    2024年02月22日
    浏览(50)
  • 利用Python中的openpyxl/Pandas库操作excel

    本文主要讲述 openpyxl库对excel文件的读取写入操作以及Pandas库对excel文件的写入操作。 一、openpyxl介绍安装 1.安装openpyxl 2.Excel中的三大对象 二、openpyxl对Excel的操作  使用openpyxl读取excel 使用openpyxl写入excel         三、使用pandas写入excel python中与excel操作相关的模块: xlrd库

    2024年02月08日
    浏览(58)
  • Java用正确的姿势写单元测试以及mock

    对于一些简单的功能或业务,我们也许可以通过前端调试、postman等接口工具、main函数调用进行测试。但这每次改动代码都要人力测试,耗费大量的人力资源且不高效,真正的项目中单元测试是必不可少的。 单元测试的三步走: 1、组装方法入参 2、执行方法 3、对方法的执行

    2024年02月13日
    浏览(37)
  • python之使用openpyxl读取excel

    获取最大行和最大列 获取某个单元格的值 获取行和列 通过worksheet.cell获取所有数据方法

    2024年02月15日
    浏览(47)
  • Python-使用openpyxl读取excel内容

    将下面的excel中的寄存器表单读入并构建一个字典 wb.sheetnames 会返回一个列表,列表中是每个工作表的名称,数据类型为str。执行上述代码后ws就是获取的工作表。 使用sheet.cell会返回cell对象,再使用cell.value才能返回单元格的值,执行上述代码的结果如下: 按行读取可以用

    2024年03月12日
    浏览(63)
  • Python用openpyxl读取单元格中的公式或读取公式计算值

    本文参考了CSDN博主「claria029」的文章,原文链接:https://blog.csdn.net/claria029/article/details/116486904 Python使用openpyxl读取带公式的单元格时,可以选择读取公式还是读取公式计算值。其关键在于打开文件时给出data_only参数,当该参数的值设为False时,读取的是单元格中的公式;当该

    2024年02月05日
    浏览(40)
  • Python用openpyxl操作Excel:读写、遍历、单元格读写

    openpyxl支持读写Excel,自带整合Pandas和NumPy功能。 worksheet cell

    2024年02月16日
    浏览(58)
  • 利用Python的csv(CSV)库读取csv文件并取出某个单元格的内容的学习过程

    csv库在python3中是自带的。 利用它可以方便的进行csv文件内容的读取。 注意:要以 gbk 的编码形式打开,因为WPS的csv文件默认是 gbk 编码,而不是 utf-8 。 表头为第1行,现在要读取并打印出第2行的内容,并附加上表头信息的代码如下: 运行效果如下: 如果要读取第3行的内容

    2024年01月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包