成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

早下班系列:輕松玩轉Excel行列轉換

企業動態
如果用Java來實現,初步估計代碼量也不會少于200行,若需要結果輸出成excel文件則開發工作量會更多。Excel自己雖然提供了VBA,但那個麻煩度誰用誰知道,不提也罷。其它的語言呢?傳說python有處理行列轉換的功能(pandas包里有pivot功能),代碼量相對于java會少很多。

早下班系列2

下面這種交叉式的Excel表是很常見的格式,用來填寫和查看都比較方便:

但是,如果想做進一步的統計分析,這種格式就不方便了,需要行列轉換,變成如下格式的明細表:

顯然,手工操作會非常麻煩,若數據量小還可以,數據量大了會耗費大量時間,簡直就是災難。

Excel也可以通過數據透視表支持行列轉換功能,效果如下圖:

但這并不是我們想要的格式。

看來只能寫個程序來解決了,思路也很簡單:

  1. 加載excel文件,裝載需要的sheet工作表。
  2. 讀取賬套名所在的行,將其轉換成字符串數組。
  3. 讀取科目編碼所在列,將其轉換成字符串數組。
  4. 按科目編碼分組,與賬套名數組構造一張表。
  5. 根據賬套名對應的數據,遍歷所有的明細值填充到相應的表中。
  6. 這樣就構造出對應的明細表來。 

如果用Java來實現,初步估計代碼量也不會少于200行,若需要結果輸出成excel文件則開發工作量會更多。Excel自己雖然提供了VBA,但那個麻煩度誰用誰知道,不提也罷。其它的語言呢?傳說python有處理行列轉換的功能(pandas包里有pivot功能),代碼量相對于java會少很多, 我們來試一下: 

  1. import pandas as pd 
  2. import numpy as np  
  3.   
  4.  
  5. df = pd.read_excel(“D:\\excel\\pandas.xlsx”, 0, 3)  
  6. cols = df.columns.values.tolist() #獲取數據頭信息  
  7. #移去前兩列,只保留需要行列轉換的列  
  8. cols.remove(‘科目編碼’)  
  9. cols.remove(‘科目明細’)  
  10.   
  11.  
  12. #構造一個list.  
  13. frames=[]  
  14. for col in cols:  
  15. df1 = df.pivot_table(index = [‘科目編碼’,’科目明細’], values = [col])  
  16. df1.rename(columns={col: ‘數值’}, inplace=True 
  17. df1[3]=col  
  18. #轉換后的數據追加到frames中.  
  19. frames.append(df1)   
  20.  
  21. # concat將相同字段的表首尾相接  
  22. result=pd.concat(frames)  
  23. result.rename(columns={3: ‘帳套名’}, inplace=True 
  24. result.to_excel(‘D:\\excel\\pandas_n.xlsx’, sheet_name=’科目明細’)  

 

嗯,還不錯,果然比較簡潔!這是Python生成的excel文件:

不過,這里有點小問題,這個excel格式有點特殊,想用Python的 pivot,我們要將“科目編碼”,“科目明細”移到與轉換列標題所在同一行上,變成下面的樣子。否則在代碼上就得特殊 “照顧”,反正只有一行,手工做一下就算了,比寫代碼省事。

無論如何,python的這個細節處理的小”瑕疵”并不影響其方便性。python確實名不虛傳,雖然使用了循環,但整個代碼也就只有10來行的樣子。 

還能更簡單嗎?

嘿嘿,能!

我們來看集算器的代碼:

  A B
1 =file(“D:/excel/明細.xlsx”).importxls@t(;1,3:40) //讀入excel文件
2 >A1.delete(A1.select(_1==”科目編碼”)) //清除首列為”科目編碼”所在的行
3 >A1.rename(_1:科目編碼,_2:科目明細) //更換列1名稱為科目編碼,列2名稱為科目明細
4 =A1.fname().to(3,).concat(“,”) //將從第三列的列名連成字符串,用,分開
5 =A1.pivot@r(科目編碼,科目明細;賬套名,數值;${A4}) //用pivot函數進行行列轉換
6 =file(“D:/excel/明細2.xlsx”).exportxls@t(A5;”科目明細”) //將整理好的數據另存儲為xlsx文件

 

代碼很簡單,我們把每一步的中間結果列出來看看:

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就只能望洋興嘆了。 

責任編輯:龐桂玉 來源: 潤乾
相關推薦

2018-01-18 16:55:29

潤乾python

2018-03-15 14:53:24

潤乾python

2021-02-07 22:27:27

UI工具網站

2022-11-13 08:06:05

ArthasEverythingMaven help

2020-09-24 10:57:12

編程函數式前端

2021-11-10 16:08:45

鴻蒙HarmonyOS應用

2021-11-10 16:07:01

鴻蒙HarmonyOS應用

2023-08-18 14:39:02

2010-07-09 12:09:34

IT運維Mocha BSM摩卡軟件

2024-05-17 08:52:43

SQL實用技巧行列轉換

2010-09-01 10:09:32

CSS樣式

2015-07-22 12:42:36

Pivot行列轉換

2013-11-01 10:41:52

Windows 8.1應用技巧

2015-08-12 10:54:22

架構云

2014-08-19 09:10:45

IT運維

2010-09-06 12:46:05

無線網絡

2010-05-07 10:47:18

微軟Live照片庫

2011-05-04 14:00:02

打印機Word打印

2019-03-15 11:07:35

華為云

2021-10-28 14:58:15

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品美女久久久久久免费 | 亚洲bt 欧美bt 日本bt | 一区二区三区高清 | 欧美日韩中文字幕 | 免费一区二区 | 美国一级黄色片 | 亚洲精品视频在线播放 | 国产综合av | 91久久精品一区二区三区 | 国产精品不卡一区 | 99精品久久久久久中文字幕 | 日韩电影中文字幕 | av香蕉 | 黄色一级电影免费观看 | 91久久精品一区二区二区 | 谁有毛片 | 久久精品一区二区视频 | 国产精品一区二区三区四区 | 婷婷在线视频 | 久久国产欧美日韩精品 | 国产成年人视频 | 337p日本欧洲亚洲大胆鲁鲁 | 精品久久久久久久久久久久久久 | 在线成人av | 成人精品一区 | 精品久久久久久久 | 精品欧美乱码久久久久久 | 99精品视频免费观看 | 99久久国产精 | 国产精品我不卡 | 91久久精品视频 | 久久精品com | 999久久久久久久久 国产欧美在线观看 | 日本欧美在线观看视频 | 亚洲精品第一国产综合野 | 国产视频欧美 | 国产精品九九九 | 久久青| 午夜激情影院 | 91 在线| 一区在线播放 |