当前位置: 首页 > news >正文

pandas数据分析40——读取 excel 合并单元格的表头

案例背景

真的很容易疯....上班的单位的表格都是不同的人做的,所以就会出现各种合并单元格的情况,要知道我们用pandas读取数据最怕合并单元格了,因为没规律...可能前几列没合并,后面几列又合并了....而且pandas对于索引很严格,这种合并单元读取进来就是空的,还怎么查找数据......例如:

 还有这种:

 读取的时候....真的很无语。虽然手工做的表头方便人看,但真的不方便代码来取数。

下面我们来看看怎么自动化读取这种多合并表格的数据,并规范表头。就用这个资产的样例


代码实现

读取数据,前2行都是标题没用跳过,然后header=0,1表示2行作为多层索引。

name='资产类别统计表2023.7.xlsx'df=pd.read_excel(f'{name}',skiprows=2,header=[0,1],converters={'类别编号': str})
df.head(3)

 

可以看到有‘unnamed’这种合并单元出现的空值的情况。 

我们可以打印查看一下行索引名称:

df.columns

 像这种只有部分下面缺失的,可以直接用上面的第一层索引填充第二层索引,让它还是两层索引,然后继续做多层索引数据框。

cols = df.columns.map(lambda x: [x[0]if 'Unnamed' in i else i for i in x])
multi_cols = pd.MultiIndex.from_arrays([list(col) for col in zip(*cols)])
df.columns=multi_cols
df.head(2)

 这样就是处理好, 然后按照多层索引的方法去进行取数。

若多层索引不熟悉,只想变成正常 的二维数据框,那么就这样:

cols = df.columns.map(lambda x: ''.join('' if 'Unnamed' in i else i for i in x))
cols

 把第一层和第二层的名称都进行合并,然后赋值:
 

df.columns=cols
df.head(2)

 这样就变成了单层数据框,完成!

后面就正常的pandas索引进行取数修改筛选计算等工作了。

http://www.lryc.cn/news/136223.html

相关文章:

  • Java后端开发面试题——微服务篇总结
  • 第十一章MyBatis查询专题
  • 测试驱动开发(TDD)
  • 深度学习|CNN卷积神经网络
  • 【洁洁送书第五期】为什么我们要了解可观测性工程
  • 将vue项目通过electron打包成windows可执行程序
  • 【0基础入门Python Web笔记】三、python 之函数以及常用内置函数
  • 相交链表00
  • 怎样压缩mp4视频大小?
  • ubuntu20.04 安装使用 Indemind 双目相机
  • 一文读懂设备管理系统:是什么、谁需要、怎样选
  • 删除链表的中间节点
  • Q/GDW 1597-2015《国家电网公司应用软件系统通用安全要求》
  • 【前端从0开始】CSS——12、光标属性
  • 文件四剑客
  • 使用lambda表达式提取共用代码使其更加简洁
  • 【八股】2023秋招八股复习笔记3(智力题 非技术题50道)
  • 服务器卡顿如何排查?
  • 设计模式——开闭原则
  • 服务器能运行什么应用
  • Linux TCP协议
  • pytorch 入门1-tensor 广播 view reshape
  • Spring参数注解,支持数组入参(List)校验
  • 如何使用ArcGIS进行可视化分析
  • 计算机竞赛 基于LSTM的天气预测 - 时间序列预测
  • uniapp 回退到指定页面 保存页面状态
  • ansible(1)-- 部署ansible连接被控端
  • Log4j反序列化命令执行漏洞(CVE-2017-5645)Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
  • echarts 之 科技感进度条
  • 基于gin关于多级菜单的处理