pandas处理excel问题(记录)

发布于:2024-05-08 ⋅ 阅读:(20) ⋅ 点赞:(0)

1. pandas读取excel合并单元格问题

网上查到的都是 df['col'] = df['col'].ffill()
这个能解决大部分简单合并的问题,遇到复杂的就不行了

在这里插入图片描述
遇到上图中 有空的情况,ffill() 也会向下填充。
所以不能通过这种方式

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()
if __name__ == '__main__':
    unmerge_cell("test.xlsx")

转自https://www.jb51.net/python/2884618do.htm

2. 向下合并excel中每列的重复数据

思路是首先读取循环每行每列的数据,同时创建列表,保存合并单元格信息、上一行的值、上一行的行号。 判断上一行的数据和当行的数据是否一致,一致就保存到列表中,不一致就合并上面保存的单元格,并清空。

但是发现了一个问题,我处理的是33列,9w行的excel数据,用openpyxl库,去执行合并单元格的操作,会很慢,大概执行了15个小时,直接崩溃。
有没有大佬请教一下,有没有办法优化


网站公告

今日签到

点亮在社区的每一天
去签到