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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

互联网轻量级框架整合之JavaEE基础

不得不解释得几个概念 JavaEE SUN公司提出来的企业版Java开发中间件,主要用于企业级互联网系统的框架搭建,同时因为Java语言优质的平台无关性、可移植性、健壮性、支持多线程和安全性等优势,其迅速成为构建企业互联网平台的主流技术&#x…

【数据结构】树tree

树的遍历 广度遍历Breadth-first traversal Breadth-first traversal is the traversal strategy used in the binary tree.Breadth first traversal, also known as level order traversal is the traversal strategy used in a binary tree. It involves visiting all the …

郭林保大夫——帕金森病明明很早就诊疗了,还是见不到好效果?

郭林保大夫:帕金森是一种常见的神经系统退行性疾病,如果不及时治疗,病情会逐渐加重,导致患者的生活质量严重下降。可能会出现肌肉僵硬、震颤、运动障碍等症状,使患者行动不便,甚至丧失自理能力。此外&#…

实时语音识别(Python+HTML实战)

项目下载地址:FunASR 1 安装库文件 项目提示所需要下载的库文件:pip install -U funasr 和 pip install modelscope 运行过程中,我发现还需要下载以下库文件才能正常运行: 下载:pip install websockets,pi…

ComfyUI SDWebUI升级pytorch随记

目前使用的版本是去年10月的1.6版本,有点老。希望支持新的特性,于是乎开始作死。从升级torch开始。先看看已有的版本: (venv) rootubuntu-sd-server:~# pip show torch Name: torch Version: 2.0.1 Summary: Tensors and Dynamic neural net…

【Spring源码】WebSocket做推送动作的底层实例

一、前瞻 Ok,开始我们今天的对Spring的【模块阅读】。 那就挑Web里的WebSocket模块,先思考下本次阅读的阅读线索: WebSocket在Spring里起到什么作用这个模块采用了什么设计模式我们都知道WebSocket可以主动推送消息给用户,那做推…

点点数据K参数加密逆向分析(RPC方案跟加密算法还原)

文章目录 1. 写在前面2. 接口分析3. 断点分析4. RPC调用5. 算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

新数字时代的启示:揭开Web3的秘密之路

在当今数字时代,随着区块链技术的不断发展,Web3作为下一代互联网的概念正逐渐引起人们的关注和探索。本文将深入探讨新数字时代的启示,揭开Web3的神秘之路,并探讨其在未来的发展前景。 1. Web3的定义与特点 Web3是对互联网未来发…

金蝶云星空和旺店通·企业奇门接口打通对接实战

金蝶云星空和旺店通企业奇门接口打通对接实战 对接源平台:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”,旨在帮助企业…

机器学习——LightGBM算法

机器学习——LightGBM算法 摘要: LightGBM是一种高效的梯度提升框架,它在处理大规模数据时表现出色,并且具有较快的训练速度和较低的内存消耗。本文将介绍LightGBM算法的原理、特点以及与传统GBDT算法的区别,并使用Python对其进行…

c++深拷贝和浅拷贝的区别

浅拷贝:在用户没有自创拷贝构造函数时,c编译器会自己提供一个,进行简单的赋值操作 深拷贝:在堆区重新申请空间,进行拷贝操作 我们先创建一个关于person的类: 在有创建两个变量 指针m_height和 整形常量 m…

揭秘情绪识别:如何让AI读懂你的心声?

最近我在研究大语言模型,想用它来给样本打分。 起初,我尝试让模型用1到5分来评分,但它总是极端地给出最低分或最高分,评分缺乏中间地带。 于是我换了个方法,不再用数字,而是用描述性的词语,比…

【Git项目部署到本地仓库】

1. 下载安装Git 根据您的操作系统,访问Git的官方网站:https://git-scm.com/download/win 具体安装教程请访问其他博客,例如:http://t.csdnimg.cn/I28VO 安装完成后,您可以通过在winR键输入cmd打开命令行输入 git -…

YOLOv9改进策略 :block优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构…

2024总结的vue3的面试题

一、vue2和vue3的区别 答案: 1、数据绑定原理不同 vue2:vue2的数据绑定是利用ES5的一个API:Object.definePropert() 对数据进行劫持,结合发布订阅模式的方式来实现的。 vue3:vue3中使用了ES6的Proxy API对数据代理…

linux提权笔记

1 linux提权简介 Linux提权,简单来说,就是用户尝试获取高于其当前权限级别的系统访问权限的过程。在Linux系统中,root用户拥有最高的权限,能够执行任何操作,包括修改系统文件、安装软件、管理用户账户等。而普通用户通…

为什么写博客对程序员很重要

之前写过一段时间博客,但是后面半途而废了。最近开始频繁更新,把自己一些学习心得系统得整理后发布出来,希望以后能够坚持写下去。 写博客对程序员有多重要?这个是自己在反思的一个问题,上下班在地铁上想,…

HCIP---MGRE和GRE实验

一、配置ip R1: [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [R1-GigabitEthernet0/0/0]int s4/0/0 [R1-Serial4/0/0]ip add 15.1.1.1 24 [R1]ip route-static 0.0.0.0 0 15.1.1.5 R2: [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 192.168.2.2…

VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突

手把手教你VsCode正确解决vue3EslintprettierVetur的配置冲突 VsCode正确解决vue3EslintprettierVetur的配置冲突Eslint文档查看和修改规则:step1:首先快速浏览下规则简要setp2: ctrlF 搜索你要配置规则的英文名,例如attributesetp3: 修改配置…

2024最新华为OD机试试题库全 -【两个字符串间的最短路径问题】- C卷

1. 🌈题目详情 1.1 ⚠️题目 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 “ABCABBA”,B字符串为 “CBABAC” 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,…