Pandas操作MultiIndex合并行列的Excel,写入读取以及写入多余行及Index列处理,插入行,修改某个单元格的值

Pandas操作MultiIndex合并行列的excel,写入读取以及写入多余行及Index列处理

  • 1. 效果图及问题
  • 2. 源码
  • 参考

今天是谁写Pandas的 复合索引MultiIndex,写的糊糊涂涂,晕晕乎乎。
是我呀…

记录下,现在终于灵台清明了。
明天在记录下直接用 openpyxl 生成合并单元格,事半功倍。
跟在Java一样,可以参考之前的博客:Java Excel导出复杂excel表格样式之ExcelUtil工具类

1. 效果图及问题

可以生成MultiIndex列的excel,但是输出会多index列及第3行多一行空行,如下图所示:

在这里插入图片描述

A列Index和第3行 都只是隐藏,并没有真正删除
writer.sheets[sheetName].set_row(2, None, None, {‘hidden’: True}) # 删除表格第3行空白行
writer.sheets[sheetName].set_row(2, 0) # 或者设置高度为0,效果图如下:

在这里插入图片描述

真正删除需要用openpyxl
wb._sheets[0].delete_rows(3) # 删除表格第3行空白行,效果图如下:

在这里插入图片描述

原始及openpyxl 最终效果:对比图如下:

在这里插入图片描述

构造一个pd Wooksheet,在第2行插入一条数据,效果图如下:
在这里插入图片描述

修改某个单元格的值:效果图可以看到成功修改

在这里插入图片描述

2. 源码

注意:openpyxl行数从1开始,pd.ExcelWriter行数从0开始

# 生成合并行列的MultiIndex数据,表格插入行
# python multiIndexPandas.py

# https://blog.csdn.net/HQ1356466973/article/details/83588993
import numpy as np
import openpyxl
import pandas as pd


# pandas 插入行
def insertRows(df, cnt, df_add):
    dfStart = df[0:cnt]
    dfEnd = df[cnt:]
    return pd.concat([dfStart, df_add, dfEnd])


# fileName 文件名称,
# argument 是否需要生成index列
def write2ExcelOrigin(fileName, argument='False'):
    writer = pd.ExcelWriter(fileName, engine='xlsxwriter')  # 可以实现将多个dataframe按不同sheet,保存在一个excel中。

    sheetName = 'Sheet1'
    if (argument == 'True'):
        df_all.to_excel(writer, sheet_name=sheetName)
        pd2.to_excel(writer, sheet_name='table')
    elif (argument == 'False'):
        df_all.to_excel(writer, sheet_name=sheetName, startcol=-2)
        pd2.to_excel(writer, sheet_name='table', startcol=-1)

    # # startcol=-1 可以不输出index列
    # df_all.to_excel(writer, sheet_name=sheetName, startcol=-2)
    # pd2.to_excel(writer, sheet_name='table', startcol=-1)
    # writer.sheets[sheetName].set_column(0, 0, None, None, {'hidden': True})  # 删除表格第一列
    #
    # # 第3行 都只是隐藏,并没有真正删除
    # writer.sheets[sheetName].set_row(2, None, None, {'hidden': True})  # 删除表格第3行空白行
    # # 或者设置高度为0
    # writer.sheets[sheetName].set_row(2, 0)

    writer._save()


index = pd.MultiIndex.from_product([['广东', '广西'], [2017, 2018]], names=['province', 'year'])
columnMultiIndex = pd.MultiIndex.from_product([['IT行业', '制造业'], ['软件', '硬件']], names=['行业', '岗位'])
data = np.random.randint(100, 2000, size=(4, 4))
df_all = pd.DataFrame(data, index=index, columns=columnMultiIndex)
print(df_all)

df2Data = np.random.randint(100, 2000, size=(3, 9))
columnName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
pd2 = pd.DataFrame(df2Data, columns=[['Tables'] * 3 + ['Attrs'] * 6, columnName])

valList = ['a', 'b', 'c']
valList.extend(np.zeros((len(columnName) - 3), dtype=str).tolist())
print(valList)

# pandas插入一行
df_add = pd.DataFrame(columns=pd2.columns, data=[valList])

# 在第2行插入数据 ['a', 'b', 'c', '', '', '', '', '', '']
pd2 = insertRows(pd2, 2, df_add)

# pandas修改某行某个单元格的值
pd2.loc[1, pd2.columns.values[0]] = '999999'
pd2.loc[3, pd2.columns.values[-1]] = 'Marvelous'

fileName = 'excel/multiIndex.xlsx'
write2ExcelOrigin(fileName, argument='False')
write2ExcelOrigin(fileName.replace(".xlsx", "0.xlsx"))

# 需要用openpyxl删除多余的第3行
wb = openpyxl.load_workbook(fileName)  # 获取表格文件

# 批量修改多个sheet
wb._sheets[0].delete_rows(3)  # 删除表格第3行空白行
wb._sheets[1].delete_rows(3)  # 删除表格第3行空白行
wb.save(filename=fileName.replace(".xlsx", "_.xlsx"))

参考

  • 复合索引构造pandas数据:https://blog.csdn.net/HQ1356466973/article/details/83588993
  • https://blog.csdn.net/m0_51212419/article/details/121681797
  • https://blog.csdn.net/u011699626/article/details/135846298

http://www.niftyadmin.cn/n/5451051.html

相关文章

qt学习第三天,qt设计师的第一个简单案例

3月25,应用qt设计师,手动设计界面形状 ​ 如何启动qt设计师,找到对应的安装地点,对应你自己安装的pyside6或其他qt的安装路径来找 ​ 应用qt设计师的优点是不用敲代码然后慢慢调节框框大小,位置等、可以直接修改…

Learn OpenGL 29 延迟着色法

延迟着色法 我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading),它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常…

使用免费ChatGPT提升工作效率

ChatGPT无限次数: 点击直达 智能工作利器ChatGPT:提升工作效率 在当今信息爆炸的时代,快速高效地撰写论文对于科研工作者来说至关重要。智能工具ChatGPT的出现为我们提供了强大的支持,它不仅能够提升工作的效率,还能够帮助我们更…

深度学习新篇章:PyTorch在遥感地物分类的革命性应用

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…

FTP 文件传输服务

FTP连接 控制连接:TCP 21,用于发送FTP命令信息 数据连接:TCP 20,用于上传、下载数据 数据连接的建立类型: 主动模式:服务端从 20 端口主动向客户端发起连接 被动模式:服务端在指定范围…

【笔试】美团2024年春招第二场笔试(技术)

【笔试】美团2024年春招第二场笔试(技术) 文章目录 T1 模拟T2 模拟T3 模拟,快速幂/打表T4 众数、前缀和、树状数组T5 逆序对,树状数组 T1 模拟 题目:数组求和,判断是否要减一个数 思路:模拟即可…

Shell学习从入门到精通(一)

1.Shell概述 1.1 为什么要学习Shell 1.需要看懂运维人员编写的Shell程序 2.编写简单的Shell程序来管理集群,提高开发效率 1.2 学习目标 了解开发语言的分类及其区别和Shell编程的适用场景掌握Bash特性、脚本规范、变量类型、变量运算掌握Bash流程控制、函数、数…

06 mybatis </sql>

文章目录 products.sqlpom.xmlmybatis-config.xmlProductsMapper.xmlProductsMapperImpl.javaProducts.javaDButil.javaProductsMapperImplTest.javaMapperTest.java products.sql create table products (product_id int auto_increment comment 产品IDprimary key,prod…