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.mzph.cn/news/780564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中throw new Error(error) 和 throw error的用法与区别

抛出错误一般都是与try catch 同时出现的。 ① throw new Error(error),这个是创建错误,创造一个错误类型(错误实例对象)抛出; ② throw error,这个是抛出错误。(不建议的写法) …

unity内存优化Texture2D优化

作为unity开发者,我们使用memory Profiler来查看内存,本期我们项目中Texture2D的内存占有比较高,为了对这块做优化我们先看下内存的占有情况。 step1 使用memory Profiler对手机应用程序截图 打开截取后的内存页面,选择顶部Unit…

【dll解密】Dll加壳保护方案分析修复

分析背景 NGame游戏海外版出现了破解版,该版本在dump出游戏的dll中不能直接通过反编译工具查看修改后的游戏代码,导致无法确定外挂修改的直接逻辑点。本文主要针对AssemblyCSharp.dll模版,分析其dll保护的方法。 分析过程 1、拿到Encrypt_As…

Spark-Scala语言实战(7)

在之前的文章中,我们学习了如何在IDEA中导入jars包,并做了一道例题,了解了RDD。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢…

04-JavaScript函数

函数(重点) 1.为什么使用函数? 用函数来解决代码重用的问题。 2.函数的意义 函数其实就是封装,把可以重复使用的代码放到函数中,如果需要多次使用同一段代码,就可以把封装成一个函数。这样的话,在你需…

Redis中处理处理没有ACK确认的Stream

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Stream是一个只能追加内容的数据类型。也就是说Stream这种数据类型,我们…

vue的创建、启动以及目录结构详解

vue的创建、启动以及目录结构详解目录 一. vue项目的创建 二. vue的目录结构 三. src的目录结构 四. vue项目的启动 4.1 方法1 4.2 方法2 一. vue项目的创建 创建一个工程化的Vue项目,执行命令:npm init vuelatest 注意:如果你在这个目…

pdf在浏览器上无法正常加载的问题

一、背景 觉得很有意思给大家分享一下。事情是这样的,开发给我反馈说,线上环境接口请求展示pdf异常,此时碰巧我前不久正好在ingress前加了一层nginx,恰逢此时内心五谷杂陈,思路第一时间便放在了改动项。捣鼓了好久无果…

动态链接dlopen/dlclose/..

dlopen,dlsym,dlclose可以在不去link shared library的前提下,在runtime时调用shared library里面的函数.这样可以实现shared library的覆盖或是省略编译阶段的链接检查.但dlopen/dlclose要谨慎使用,尤其是有些写的不是很好的shared library. 动态链接函…

搜索与图论——Prim算法求最小生成树

在最小生成树问题里&#xff0c;正边和负边都没问题 朴素版prim算法 时间复杂度O(n^2) 生成树&#xff1a;每一次选中的t点&#xff0c;它和集合的距离对应的那条边&#xff0c;就是生成树的一条边 算法流程和dijkstra算法非常相似 #include<iostream> #include<cs…

OKCC的API资源管理平台怎么用?

API资源管理平台&#xff0c;重点是“资源”管理平台&#xff0c;不是API接口管理平台。 天天讯通推出的API资源管理平台&#xff0c;类似昆石的VOS系统&#xff0c;区别是VOS是SIP资源管理系统&#xff0c;我们的API资源管理平台是API资源管理系统&#xff08;AXB、AX、回拨AP…

【御控物联】JavaScript JSON结构转换(7):数组To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

【Spring Cache】基于注解的缓存框架 简化redis代码

文章目录 一、介绍二、常用注解三、快速入门3.1 EnableCaching3.2 CachePut3.3 Cacheable3.4 CacheEvict 一、介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层…

带你认识线程

线程的概念 前言&#xff1a; 一个程序运行起来&#xff0c;就会对应一个进程&#xff0c;例如&#xff0c;启动一个 Java 程序&#xff0c;就会创建一个 Java 进程。进程也被称为系统分配资源的基本单位。 一个进程可以包含一个线程&#xff0c;也可以包含多个线程&#xff…

政安晨:【Keras机器学习实践要点】(九)—— 保存、序列化和导出模型

目录 介绍 如何保存和加载模型 保存一个Keras模型 装回模型 设置 保存 例子&#xff1a; 自定义对象 向 load_model() 传递自定义对象 使用自定义对象范围 模型序列化 APIs 内存模型克隆 任意对象序列化和反序列化 保存模型权重 内存中的权重传递接口 无状态层…

新能源充电桩站场视频汇聚系统建设方案及技术特点分析

随着新能源汽车的普及&#xff0c;充电桩作为新能源汽车的基础设施&#xff0c;其安全性和可靠性越来越受到人们的关注。为了更好地保障充电桩的安全运行与站场管理&#xff0c;TSINGSEE青犀&触角云推出了一套新能源汽车充电桩视频汇聚管理与视频监控方案。 方案采用高清摄…

甲骨文护城河(MOAT)分析工具-用户指南

甲骨文护城河&#xff08;MOAT&#xff09;分析工具-用户指南 登录后&#xff0c;您可以通过显示的基于web的用户界面访问Moat Analytics Dashboard。 以下是如何通过UI使用护城河的指南的使用目录&#xff1a; 一、主屏幕导航 在面板中创建警报和导出 二、无效流量概述 什…

深入浅出MHA(MySQL Master High Availability)集群:原理、部署与实践

目录 引言 一、MHA集群介绍 &#xff08;一&#xff09;什么是MHA &#xff08;二&#xff09;MHA集群原理 &#xff08;三&#xff09;同步方式 &#xff08;四&#xff09;管理节点与数据节点 二、实现MHA &#xff08;一&#xff09;搭建主从复制环境 1.搭建时间同…

Github profile Readme实现小游戏[github自述游戏]

Github profile Readme常用于个人主页介绍&#xff0c;将它与action自动化流程结合&#xff0c;可以实现一些小游戏 例如&#xff1a;2048、五子棋 2048实现 losehu (RUBO) GitHub 五子棋 https://github.com/losehu/losehu/tree/main 通过python/C编写可执行文件&#xf…

智能网关BL102E采集西门子PLC S7-200 Smart数据上传至Thingsboard

1、WAN口采集西门子PLC的配置 WAN口可以添加很多设备,具体我们用西门子为例来简要配置。 双击WAN,弹出以太网设置,直接把自动获取IP打开,他会根据你的网段自动设置链接! (1)点击`WAN",点击鼠标右键,点击“添加",弹出设备配置框。 (2)设备名称任意填写,如…