偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么Python比VBA更適合自動(dòng)化處理Excel數(shù)據(jù)?

大數(shù)據(jù) 自動(dòng)化
每當(dāng)有人發(fā)布關(guān)于 python 處理 Excel 數(shù)據(jù)的文章,總會(huì)有人只看了標(biāo)題就評(píng)論:"vba處理已經(jīng)足夠,完全沒(méi)必要使用python";"我工作環(huán)境不能安裝,因此vba就比python更適合處理Excel";"vba比python快速100倍!"其實(shí),那些稍微接觸過(guò) pandas 的人,相信都會(huì)心底上抗拒使用vba。

每當(dāng)有人發(fā)布關(guān)于 python 處理 Excel 數(shù)據(jù)的文章,總會(huì)有人只看了標(biāo)題就評(píng)論:

  • "vba處理已經(jīng)足夠,完全沒(méi)必要使用python"。
  • "我工作環(huán)境不能安裝,因此vba就比python更適合處理Excel"
  • "vba比python快速100倍!"

其實(shí),那些稍微接觸過(guò) pandas 的人,相信都會(huì)心底上抗拒使用vba。

而我本人一直保持一個(gè)觀點(diǎn),各種工具都有他的優(yōu)劣勢(shì),拋開(kāi)應(yīng)用場(chǎng)景單純說(shuō)某個(gè)工具更好都是在耍流氓。今天,我就舉例說(shuō)明一下,哪些場(chǎng)景適合vba,哪些場(chǎng)景適合python。

我喜歡用實(shí)際案例說(shuō)明問(wèn)題,本文使用泰坦尼克號(hào)沉船事件中的乘客信息表:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

實(shí)現(xiàn)幾個(gè)簡(jiǎn)單分析需求:

  • 找出多人(2人或以上)一起登船的組的數(shù)量
  • 列出這些人的信息
  • 是否存在最幸運(yùn)的親朋好友(多人一起登船,同時(shí)全部人都獲救)?

"操作 Excel"等于"數(shù)據(jù)處理"嗎?

初學(xué)者往往誤以為操作 Excel 就是在處理數(shù)據(jù),實(shí)際上是兩回事。

需求是:"姓名與住址列內(nèi)容通常很長(zhǎng),希望最終Excel顯示的時(shí)候,使用縮小字體填充"。

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

對(duì)于這種格式化設(shè)置,vba絕對(duì)是最佳選擇!因?yàn)槲覀兛梢酝ㄟ^(guò)錄制宏,自動(dòng)得到大概的代碼

通過(guò)簡(jiǎn)單的錄制宏,我們就能寫(xiě)出如下實(shí)現(xiàn):

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

如果我們使用 python 實(shí)現(xiàn)相同的需求,代碼肯定只多不少,并且難以調(diào)試。

如果你看過(guò)我的專(zhuān)欄《帶你玩轉(zhuǎn)Python數(shù)據(jù)處理—pandas》的話,其中關(guān)于數(shù)據(jù)處理流程一節(jié),你會(huì)想到,這就是"數(shù)據(jù)展示"的流程。

也就是說(shuō),如果你的數(shù)據(jù)任務(wù)最終需要輸出 Excel 文件,vba是"數(shù)據(jù)展示"過(guò)程的最佳自動(dòng)化工具。

可惜,現(xiàn)實(shí)中的大部分需求并不單純,都需要進(jìn)行"數(shù)據(jù)處理",那么 vba 中又是如何處理數(shù)據(jù)?

vba 使用數(shù)組+字典,就是高效率?

大部分不經(jīng)思考,張口就反對(duì) python 的同學(xué),都是對(duì)自己的 vba "數(shù)組+字典" 的技能有著迷之自信。

來(lái)看一個(gè)數(shù)據(jù)分析相關(guān)的處理需求:

我們注意到,有些人是親朋好友一起上船,比如:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?
  • 從"票根號(hào)"一樣,可以看出來(lái)他們是一起上船
  • 從"住址"一樣,可以看出來(lái)他們是一家四口

我們需要統(tǒng)計(jì)出有多少組這些2人或以上登船的?

以下嘗試用vba解決:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

其實(shí)代碼不算多,里面的技巧也只是基礎(chǔ),但是如果會(huì) pandas 的同學(xué)心里肯定會(huì)說(shuō):"太繁瑣了"。

因?yàn)閷?duì)于 pandas 來(lái)說(shuō),如下:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

代碼就4句,最關(guān)鍵的其實(shí)只有3句,分別表示:

  • 加載數(shù)據(jù)
  • 按"票根號(hào)"分組統(tǒng)計(jì)數(shù)量
  • 數(shù)量大于1的總和

這不就是一個(gè)正常人的處理思維嗎?這就是簡(jiǎn)潔

能夠與需求表達(dá)語(yǔ)義相近,多余的表達(dá)越少,即越簡(jiǎn)潔

回頭看 vba 的表達(dá),多余的表達(dá)非常多。

  • Excel 有一個(gè)非常好用的統(tǒng)計(jì)工具——透視表。你可以嘗試通過(guò)錄制宏得到透視表的操作代碼,但是你仍然會(huì)發(fā)現(xiàn)有許多多余的表達(dá)。
  • Sql 的表達(dá)更加簡(jiǎn)潔,但是實(shí)現(xiàn)如上的需求,你會(huì)發(fā)現(xiàn)他的表達(dá)順序需要"繞"一下

有些不服氣的同學(xué)會(huì)說(shuō):"我寫(xiě)出這段vba代碼也就1分鐘,反正也能得到正確結(jié)果"

當(dāng)需求不斷變化,你就會(huì)發(fā)現(xiàn)這樣子的代碼最終走向無(wú)法實(shí)現(xiàn)的死胡同。

剛剛我們知道了有216組親朋好友是一起登船的,但只有一個(gè)數(shù)字,我們希望看看這216數(shù)據(jù)的大概樣子。

也就是說(shuō)輸出這些乘客數(shù)據(jù)。

python 的實(shí)現(xiàn):

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?
  • 順便排序一下,方便觀察
  • 這里代碼多余的表達(dá),就是那個(gè) lambda 單詞。如果換成是 sql ,就非常簡(jiǎn)潔

vba 的實(shí)現(xiàn)太麻煩了,就留給那些不服氣的 vba 粉絲吧

現(xiàn)在你大概能夠稍微理解,為什么 Python 在數(shù)據(jù)領(lǐng)域這么受寵了。

數(shù)據(jù)分析中的數(shù)據(jù)處理,需要你的代碼趕上你的思維速度,只有簡(jiǎn)潔的語(yǔ)言才能做到。

按理說(shuō),sql 應(yīng)該是更好的選擇,但實(shí)際上很多復(fù)雜需求實(shí)現(xiàn),sql 需要大量的嵌套查詢,此時(shí)就一點(diǎn)都不簡(jiǎn)潔了。以后再舉例說(shuō)明

現(xiàn)實(shí)的需求是 "操作Excel" + "數(shù)據(jù)處理" ,怎么辦?

這時(shí)候最理想的情況是,使用 vba 操作 Excel,數(shù)據(jù)處理交給 Python,中間就需要一個(gè)橋梁把 vba 與 python 打通,這就是 xlwings 或其他類(lèi)似的庫(kù)的最佳實(shí)踐方式。

如果你完全使用 xlwings 控制 Excel,Python 代碼操作 Excel 寫(xiě)起來(lái)非常別扭,一旦你理清楚 "操作Excel" 與 "數(shù)據(jù)處理" 的區(qū)別,自然而然知道如何組織你的代碼。

Python 需要單獨(dú)安裝,因此他比不上 vba

這是一種無(wú)聊的結(jié)論,因?yàn)槿魏巫詣?dòng)化工具都需要安裝,比如學(xué)習(xí)性價(jià)比最高的 Sql ,他也需要安裝相應(yīng)的驅(qū)動(dòng)程序才能執(zhí)行。

而我本人的工作環(huán)境有一部分任務(wù)是需要放在服務(wù)器上執(zhí)行,此時(shí)是不可能安裝 Excel,vba 也用不上了,但我不能因此作出"vba比不上python"的結(jié)論吧。

如果你的工作環(huán)境不能安裝 python,但你又需要做大量數(shù)據(jù)處理任務(wù),那么我只能說(shuō)非常不幸,你只能犧牲自己大量的時(shí)間使用vba去完成需求。

Vba 就不能有 pandas 的存在嗎?

"說(shuō)了半天,不就是 python 比 vba 多了一個(gè) pandas 庫(kù)而已嗎,找個(gè)vba牛人去寫(xiě)一個(gè) vba-pandas 就行啦!"

vba 天生缺少了一種語(yǔ)言特性,使得你即使有寫(xiě)庫(kù)的能力,也無(wú)法發(fā)揮。

這就是提取邏輯的能力.

通常來(lái)說(shuō),如果一段代碼有些數(shù)據(jù)不是固定,我們可以提取成函數(shù)的參數(shù),比如最簡(jiǎn)單的數(shù)字計(jì)算:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?
  • 分別定義3個(gè)參數(shù),讓你輸入,但計(jì)算方式是固定的

對(duì)于 vba 來(lái)說(shuō)他同樣可以做到,但是如果是其中一段代碼不是固定,能否把他提取為參數(shù)呢?

而 python 就能做到,比如以下的函數(shù),可以讓你輸入3個(gè)數(shù)字,并且由你決定前2個(gè)數(shù)字的計(jì)算方式,最后與第3個(gè)數(shù)字做乘法:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

結(jié)果時(shí),第一個(gè)數(shù)乘以10 + 第二個(gè)數(shù)乘以100(這是變化的邏輯,由使用函數(shù)的人自行決定),最后乘以第三個(gè)數(shù)(這是固定邏輯,由定義函數(shù)的人決定)

vba 需要使用接口做到同樣的效果,非常麻煩,對(duì)于數(shù)據(jù)任務(wù)沒(méi)有任何實(shí)用價(jià)值

這有什么用處?用最后一個(gè)需求說(shuō)明:

  • 是否存在最幸運(yùn)的親朋好友(多人一起登船,同時(shí)全部人都獲救)?

假如說(shuō),我只給你一組相同"票根號(hào)"的乘客數(shù)據(jù),該如何判斷他們都是生還呢?

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?

只要看"生還"列是否都為1就可以。方式非常多,除了上面的做法,還可以"生還列求和,看看是否等于記錄行數(shù)"

前一個(gè)需求中使用的 filter 就是可以接受一段邏輯(函數(shù)),pandas 負(fù)責(zé)幫你分組,你只需要在函數(shù)中描述出符合條件的邏輯即可:

 

為什么python比vba更適合自動(dòng)化處理Excel數(shù)據(jù)?
  • 把剛剛定義的函數(shù),傳給 filter 函數(shù)

而 vba 無(wú)法做到這一點(diǎn),就意味著他無(wú)法做出 pandas 一樣好用的庫(kù)!

因?yàn)樵S多看似復(fù)雜的流程,其實(shí)是由許多固定的邏輯 + 變化的邏輯 組成。

比如分組的原理就類(lèi)似 vba 中使用字典,這是相對(duì)固定的,完全可以讓庫(kù)完成。

但是分組后,每一組的處理邏輯卻是變化的,由使用者臨時(shí)決定,比如之前的需求分組中我們有時(shí)候需要計(jì)數(shù),有時(shí)候需要篩選。篩選的邏輯也是千變?nèi)f化。

最后

任何工具都有他的適用場(chǎng)景,如何合理利用才是我們的學(xué)習(xí)方向,而非一根經(jīng)地排斥自己不熟悉的工具。

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-04-28 14:50:07

ElasticSearMySQL數(shù)據(jù)庫(kù)

2021-02-19 08:17:07

MySQL ElasticSea搜索

2022-04-28 18:37:50

PythonExcel

2018-10-17 12:34:36

災(zāi)難恢復(fù)云計(jì)算數(shù)據(jù)中心

2021-04-21 07:31:01

ElasticSearMySQLCPU

2020-11-23 16:18:21

Python開(kāi)發(fā)工具

2024-09-09 04:00:00

GPU人工智能

2010-11-24 10:16:04

Office 365Google Apps

2024-05-23 11:33:42

python代碼開(kāi)發(fā)

2013-01-29 10:40:26

云環(huán)境應(yīng)用程序開(kāi)發(fā)

2019-08-21 09:24:45

GPUCPU深度學(xué)習(xí)

2013-01-29 08:43:32

應(yīng)用程序開(kāi)發(fā)PaaS

2011-12-07 20:43:33

2021-02-22 10:39:10

多云云計(jì)算云平臺(tái)

2022-07-28 13:54:16

RPABPA自動(dòng)化項(xiàng)目

2021-04-27 09:00:00

PythonIDE開(kāi)發(fā)

2025-03-28 09:15:50

2024-12-30 08:33:54

大型模型GeminiLLM

2009-11-05 18:50:04

Windows 7上網(wǎng)本

2009-09-04 11:26:00

英特爾虛擬化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)