oracle行列转换关联union的方式_几行代码轻松玩转 Excel 行列转换
几行代码轻松玩转 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 行列转换相关推荐
- html 简繁文件转换器,几行代码轻松搞定网页的简繁转换
几行代码轻松搞定网页的简繁转换以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对网页进行简繁字体转换的方法一般有两种 ...
- python怎么识别图片里面的文字并合成语音_几行代码搞定识别图片中的文字信息,同时转换成语音...
image前几天想把一篇不错的文章保存下来,无奈是图片的,于是想利用python把图片中的文字识别出来 实现的方式还是挺多的,这里介绍下百度的AI开放平台,毕竟大公司,感觉识别的精度会高点,同时相信他 ...
- @excel注解_惊了!如何通过阿里 EasyExcel 7 行代码, 优雅地实现 Excel 文件导出功能?...
目录 一.前言 二.Apache poi.jxl 的缺陷 三.阿里出品的 EasyExcel,安利一波 四.EasyExcel 解决了什么 五.快速上手 六.特殊场景支持 七.Web 下载示例代码 八 ...
- js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输
百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...
- python灰色模型代码_几行代码搞定ML模型,低代码机器学习Python库正式开源
机器之心报道 机器之心编辑部 PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代 ...
- python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源
PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的 ...
- pandas 选择数据 字符串_读完本文,轻松玩转数据处理利器Pandas 1.0
选自Medium 作者:Tom Waterman机器之心编译参与:李诗萌.魔王 2020 年 1 月 9 日 Pandas 1.0.0rc 版本面世,Facebook 数据科学家 Tom Waterm ...
- 3行代码用python实现图片格式转换
目录 前沿 代码实现 结果展示 前沿 对于图片的不同格式对于现如今的PC机来讲查看是完全没有问题的,但对于部分软件,要想实现图片的上传就只能是几种常见的数据格式,如:.jpg..png..jpeg等格 ...
- 几行代码轻松搞定网页的简繁转换(转载)
对网页进行简繁字体转换的方法一般有两种:一是使用<简繁通>这样的专业软件,另外一种是制作两套版本的网页.显然,这两种方法都较为麻烦,而且专业软件一般不能用于免费的空间.笔者在这里给大家提供 ...
最新文章
- ASP.NET比较常用的26个性能优化技巧
- 这种个性化可视化图也太可爱了吧!
- 5/5 MySQL入门总结:其它操作
- 浅谈OpenCL之Platform API(2)
- eclipse 编码设置之BOM丢失
- html中将字体设置成透明的,解决css设置背景透明,文字不透明_html/css_WEB-ITnose
- 关键词搜索查找工具-批量关键词查找搜索工具-根据关键词自动采集素材软件
- 苹果所用应用打不开怎么办?论浮标有多重要?
- C# 关于压缩、加密、解压问题
- 详解数据仓库和数据集市:ODS、DW、DWD、DWM、DWS、ADS
- excel切片器_数据可视化小助手EXCEL切片器
- IAMP方式下载邮件记录
- 计算机非全日制硕士 选校,非全日制研究生如何来选择学校呢?
- 5-1 Coursera吴恩达《序列模型》 第一周课程笔记-循环序列网络(RNN)
- Intel汇编语言程序设计读书笔记(基本概念)
- 《炬丰科技-半导体工艺》氮化镓的制备与表征
- 【122期分享】工作计划PPT模板免费下载
- 马云最简单最赚钱的互联网产业,普通人如何才能抓住这波财富机会
- go linux 开发工具,golang的基础语法和常用开发工具详解
- echarts移动端设备屏幕尺寸的适配
热门文章
- SAP Spartacus的用户登录页面设计
- 深入学习SAP UI5框架代码系列之三:HTML原生事件 VS UI5 Semantic事件
- SAP Spartacus的cxComponentWrapper指令
- 80行JavaScript代码实现的贪食蛇游戏,简约之美
- CRM中间件里parent not ok的错误消息如何处理
- dynamic change date type to sap.ca.ui.model.type.Date in Debugger
- some VM operation when debugging appointment startup
- SAP Gateway service language determination
- SAP CRM中间件Object出现wait状态的原因调试
- coach和mentor,教练和导师的区别