几行代码轻松玩转 Excel 行列转换

下面这种交叉式的 Excel 表是很常见的格式,用来填写和查看都比较方便:

但是,如果想做进一步的统计分析,这种格式就不方便了,需要行列转换,变成如下格式的明细表:

显然,手工操作会非常麻烦,若数据量小还可以,数据量大了会耗费大量时间,简直就是灾难。

Excel 也可以通过数据透视表支持行列转换功能,效果如下图:

但这并不是我们想要的格式。

看来只能写个程序来解决了,思路也很简单:

  • 加载 excel 文件,装载需要的 sheet 工作表。
  • 读取账套名所在的行,将其转换成字符串数组。
  • 读取科目编码所在列,将其转换成字符串数组。
  • 按科目编码分组,与账套名数组构造一张表。
  • 根据账套名对应的数据,遍历所有的明细值填充到相应的表中。
  • 这样就构造出对应的明细表来。

如果用 Java 来实现,初步估计代码量也不会少于 200 行,若需要结果输出成 excel 文件则开发工作量会更多。Excel 自己虽然提供了 VBA,但那个麻烦度谁用谁知道,不提也罢。其它的语言呢?传说 python 有处理行列转换的功能(pandas 包里有 pivot 功能),代码量相对于 java 会少很多, 我们来试一下:

import pandas as pd

import numpy as np

df = pd.read_excel(“D:excelpandas.xlsx”, 0, 3)

cols = df.columns.values.tolist() #获取数据头信息

#移去前两列,只保留需要行列转换的列

cols.remove(‘科目编码’)

cols.remove(‘科目明细’)

#构造一个 list.

frames=[]

for col in cols:

df1 = df.pivot_table(index = [‘科目编码’,’科目明细’], values = [col])

df1.rename(columns={col: ‘数值’}, inplace=True)

df1[3]=col

#转换后的数据追加到 frames 中.

frames.append(df1)

# concat 将相同字段的表首尾相接

result=pd.concat(frames)

result.rename(columns={3: ‘帐套名’}, inplace=True)

result.to_excel(‘D:excelpandas_n.xlsx’, sheet_name=’科目明细’)

嗯,还不错,果然比较简洁!这是 Python 生成的 excel 文件:

不过,这里有点小问题,这个 excel 格式有点特殊,想用 Python 的 pivot,我们要将“科目编码”,“科目明细”移到与转换列标题所在同一行上,变成下面的样子。否则在代码上就得特殊 “照顾”,反正只有一行,手工做一下就算了,比写代码省事。

无论如何,python 的这个细节处理的小”瑕疵”并不影响其方便性。python 确实名不虚传,虽然使用了循环,但整个代码也就只有 10 来行的样子。

还能更简单吗?

嘿嘿,能!

我们来看集算器的代码:

代码很简单,我们把每一步的中间结果列出来看看:

A1:加载 excel 文件工作表 1,提取指定范围的数据 (从 3 行到 40 行),其中选项 @ t 表示首行为标题,载入数据, 生成表格如下:

A2:删除非数据行

A3:更换列名称

A4:把从第三列开始的列名称连成字符串,用“,”分开

A5:pivot 函数将行列数据进行转换,把 A4 中对应的列数据置放到“数值”列

A6:将整理好的数据另存储为 xls 文件

集算器脚本只 6 行,而且木有啥循环、判断之类的玩意儿,也不像 Python 那样要先手工倒腾一下,就把这看似有点“乱”的数据表格处理好了。相比之下,Python 采用列优先转换多次循环 “N”字方式,集算器则用行优先一次性处理,在处理数据上,集算器对细节处理及使用习惯更专业。而且集算器的开发环境也容易调试,可以看到每一步运算的中间结果,方便挑出错误,开发更为便捷。在这种常规数据处理的任务中,集算器要比 Python 更为优越。

就这个问题,关于 python 与集算器的差异,再说说自己的一点体会:

1. 多列转换:

对于需要多列行列转换并汇集成“长”列的场景时,python 需要将每个数据列构造成数组,并增加一列记录当前列名,再追加到一个大的列表中,最后合并,合并中去掉非首个数组中的 title;

集算器就容易些,它直接把想要转换的列汇集在一块就行。相对于 python 的繁琐,集算器至少能省几个脑细胞。

2. 名称更改:

python 对于需要转换列的名称不能更改, 如 cols[0]=’天津’,此时 python 找不到修改前的关键字,“哪个朋友挖的坑,别以为我发现不了”,欺负大爷眼花,给报个异常行不?

但对应的集算器来说则很方便, 如:>A1.rename(_1: 科目编码,_2: 科目明细,4 成都: 成都)

3. 标题空值问题:

Python 读取 excel 表中的转换行标题时,前面两列为空 (对应原来的 excel 中的“科目编码,科目明细”),此时标题 cols 中的空值就没有了, 这个“坑”有点隐蔽啊,我真没有发现, 把其中的两列弄丢了,真有点丢脸 ;

但集算器能识别出来,会自动加上对应的标识 _1、_2,这样处理数据时,就能找到其中对应的两列。

4. 网格式编程

集算器使用网格 A1 这种格式,它自动与所在位置的对象关联起来,这点非常方便, 感觉很有特色;Python 就只能望洋兴叹了。

oracle行列转换关联union的方式_几行代码轻松玩转 Excel 行列转换相关推荐

  1. html 简繁文件转换器,几行代码轻松搞定网页的简繁转换

    几行代码轻松搞定网页的简繁转换以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对网页进行简繁字体转换的方法一般有两种 ...

  2. python怎么识别图片里面的文字并合成语音_几行代码搞定识别图片中的文字信息,同时转换成语音...

    image前几天想把一篇不错的文章保存下来,无奈是图片的,于是想利用python把图片中的文字识别出来 实现的方式还是挺多的,这里介绍下百度的AI开放平台,毕竟大公司,感觉识别的精度会高点,同时相信他 ...

  3. @excel注解_惊了!如何通过阿里 EasyExcel 7 行代码, 优雅地实现 Excel 文件导出功能?...

    目录 一.前言 二.Apache poi.jxl 的缺陷 三.阿里出品的 EasyExcel,安利一波 四.EasyExcel 解决了什么 五.快速上手 六.特殊场景支持 七.Web 下载示例代码 八 ...

  4. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

  5. python灰色模型代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    机器之心报道 机器之心编辑部 PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代 ...

  6. python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的 ...

  7. pandas 选择数据 字符串_读完本文,轻松玩转数据处理利器Pandas 1.0

    选自Medium 作者:Tom Waterman机器之心编译参与:李诗萌.魔王 2020 年 1 月 9 日 Pandas 1.0.0rc 版本面世,Facebook 数据科学家 Tom Waterm ...

  8. 3行代码用python实现图片格式转换

    目录 前沿 代码实现 结果展示 前沿 对于图片的不同格式对于现如今的PC机来讲查看是完全没有问题的,但对于部分软件,要想实现图片的上传就只能是几种常见的数据格式,如:.jpg..png..jpeg等格 ...

  9. 几行代码轻松搞定网页的简繁转换(转载)

    对网页进行简繁字体转换的方法一般有两种:一是使用<简繁通>这样的专业软件,另外一种是制作两套版本的网页.显然,这两种方法都较为麻烦,而且专业软件一般不能用于免费的空间.笔者在这里给大家提供 ...

最新文章

  1. ASP.NET比较常用的26个性能优化技巧
  2. 这种个性化可视化图也太可爱了吧!
  3. 5/5 MySQL入门总结:其它操作
  4. 浅谈OpenCL之Platform API(2)
  5. eclipse 编码设置之BOM丢失
  6. html中将字体设置成透明的,解决css设置背景透明,文字不透明_html/css_WEB-ITnose
  7. 关键词搜索查找工具-批量关键词查找搜索工具-根据关键词自动采集素材软件
  8. 苹果所用应用打不开怎么办?论浮标有多重要?
  9. C# 关于压缩、加密、解压问题
  10. 详解数据仓库和数据集市:ODS、DW、DWD、DWM、DWS、ADS
  11. excel切片器_数据可视化小助手EXCEL切片器
  12. IAMP方式下载邮件记录
  13. 计算机非全日制硕士 选校,非全日制研究生如何来选择学校呢?
  14. 5-1 Coursera吴恩达《序列模型》 第一周课程笔记-循环序列网络(RNN)
  15. Intel汇编语言程序设计读书笔记(基本概念)
  16. 《炬丰科技-半导体工艺》氮化镓的制备与表征
  17. 【122期分享】工作计划PPT模板免费下载
  18. 马云最简单最赚钱的互联网产业,普通人如何才能抓住这波财富机会
  19. go linux 开发工具,golang的基础语法和常用开发工具详解
  20. echarts移动端设备屏幕尺寸的适配

热门文章

  1. SAP Spartacus的用户登录页面设计
  2. 深入学习SAP UI5框架代码系列之三:HTML原生事件 VS UI5 Semantic事件
  3. SAP Spartacus的cxComponentWrapper指令
  4. 80行JavaScript代码实现的贪食蛇游戏,简约之美
  5. CRM中间件里parent not ok的错误消息如何处理
  6. dynamic change date type to sap.ca.ui.model.type.Date in Debugger
  7. some VM operation when debugging appointment startup
  8. SAP Gateway service language determination
  9. SAP CRM中间件Object出现wait状态的原因调试
  10. coach和mentor,教练和导师的区别