中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么處理Excel數據

發布時間:2021-11-23 11:49:56 來源:億速云 閱讀:189 作者:iii 欄目:大數據

這篇文章主要介紹“Python怎么處理Excel數據”,在日常操作中,相信很多人在Python怎么處理Excel數據問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python怎么處理Excel數據”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

我喜歡用實際案例說明問題,本文使用泰坦尼克號沉船事件中的乘客信息表:

Python怎么處理Excel數據

實現幾個簡單分析需求:

  • 找出多人(2人或以上)一起登船的組的數量

  • 列出這些人的信息

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

"操作 Excel"等于"數據處理"嗎?

初學者往往誤以為操作 Excel 就是在處理數據,實際上是兩回事。

需求是:"姓名與住址列內容通常很長,希望最終Excel顯示的時候,使用縮小字體填充"。

Python怎么處理Excel數據

對于這種格式化設置,vba絕對是最佳選擇!因為我們可以通過錄制宏,自動得到大概的代碼

通過簡單的錄制宏,我們就能寫出如下實現:

Python怎么處理Excel數據

如果我們使用 python 實現相同的需求,代碼肯定只多不少,并且難以調試。

如果你看過我的專欄《帶你玩轉Python數據處理—pandas》的話,其中關于數據處理流程一節,你會想到,這就是"數據展示"的流程。

也就是說,如果你的數據任務最終需要輸出 Excel 文件,vba是"數據展示"過程的最佳自動化工具。

可惜,現實中的大部分需求并不單純,都需要進行"數據處理",那么 vba 中又是如何處理數據?

vba 使用數組+字典,就是高效率?

大部分不經思考,張口就反對 python 的同學,都是對自己的 vba "數組+字典" 的技能有著迷之自信。

來看一個數據分析相關的處理需求:

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

Python怎么處理Excel數據
  • 從"票根號"一樣,可以看出來他們是一起上船

  • 從"住址"一樣,可以看出來他們是一家四口

我們需要統計出有多少組這些2人或以上登船的?

以下嘗試用vba解決:

Python怎么處理Excel數據

其實代碼不算多,里面的技巧也只是基礎,但是如果會 pandas 的同學心里肯定會說:"太繁瑣了"。

因為對于 pandas 來說,如下:

Python怎么處理Excel數據

代碼就4句,最關鍵的其實只有3句,分別表示:

  • 加載數據

  • 按"票根號"分組統計數量

  • 數量大于1的總和

這不就是一個正常人的處理思維嗎?這就是簡潔

能夠與需求表達語義相近,多余的表達越少,即越簡潔

回頭看 vba 的表達,多余的表達非常多。

  • Excel 有一個非常好用的統計工具——透視表。你可以嘗試通過錄制宏得到透視表的操作代碼,但是你仍然會發現有許多多余的表達。

  • Sql 的表達更加簡潔,但是實現如上的需求,你會發現他的表達順序需要"繞"一下

有些不服氣的同學會說:"我寫出這段vba代碼也就1分鐘,反正也能得到正確結果"

當需求不斷變化,你就會發現這樣子的代碼最終走向無法實現的死胡同。

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

也就是說輸出這些乘客數據。

python 的實現:

Python怎么處理Excel數據
  • 順便排序一下,方便觀察

  • 這里代碼多余的表達,就是那個 lambda 單詞。如果換成是 sql ,就非常簡潔

vba 的實現太麻煩了,就留給那些不服氣的 vba 粉絲吧

現在你大概能夠稍微理解,為什么 Python 在數據領域這么受寵了。

數據分析中的數據處理,需要你的代碼趕上你的思維速度,只有簡潔的語言才能做到。

按理說,sql 應該是更好的選擇,但實際上很多復雜需求實現,sql 需要大量的嵌套查詢,此時就一點都不簡潔了。以后再舉例說明

現實的需求是 "操作Excel" + "數據處理" ,怎么辦?

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

如果你完全使用 xlwings 控制 Excel,Python 代碼操作 Excel 寫起來非常別扭,一旦你理清楚 "操作Excel" 與 "數據處理"  的區別,自然而然知道如何組織你的代碼。

Python 需要單獨安裝,因此他比不上 vba

這是一種無聊的結論,因為任何自動化工具都需要安裝,比如學習性價比最高的 Sql ,他也需要安裝相應的驅動程序才能執行。

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

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

Vba 就不能有 pandas 的存在嗎?

"說了半天,不就是 python 比 vba 多了一個 pandas 庫而已嗎,找個vba牛人去寫一個 vba-pandas 就行啦!"

vba 天生缺少了一種語言特性,使得你即使有寫庫的能力,也無法發揮。

這就是提取邏輯的能力.

通常來說,如果一段代碼有些數據不是固定,我們可以提取成函數的參數,比如最簡單的數字計算:

Python怎么處理Excel數據
  • 分別定義3個參數,讓你輸入,但計算方式是固定的

對于 vba 來說他同樣可以做到,但是如果是其中一段代碼不是固定,能否把他提取為參數呢?

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

Python怎么處理Excel數據

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

vba 需要使用接口做到同樣的效果,非常麻煩,對于數據任務沒有任何實用價值

這有什么用處?用最后一個需求說明:

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

假如說,我只給你一組相同"票根號"的乘客數據,該如何判斷他們都是生還呢?

Python怎么處理Excel數據

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

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

Python怎么處理Excel數據
  • 把剛剛定義的函數,傳給 filter 函數

而 vba 無法做到這一點,就意味著他無法做出 pandas 一樣好用的庫!

因為許多看似復雜的流程,其實是由許多固定的邏輯 + 變化的邏輯 組成。

比如分組的原理就類似 vba 中使用字典,這是相對固定的,完全可以讓庫完成。

但是分組后,每一組的處理邏輯卻是變化的,由使用者臨時決定,比如之前的需求分組中我們有時候需要計數,有時候需要篩選。篩選的邏輯也是千變萬化。

到此,關于“Python怎么處理Excel數據”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊金霍洛旗| 蒙山县| 黄平县| 永新县| 古丈县| 城口县| 韩城市| 红安县| 漳浦县| 红河县| 昌乐县| 上蔡县| 阜城县| 五华县| 铜山县| 龙门县| 尼木县| 深泽县| 崇义县| 广元市| 娄烦县| 香河县| 迭部县| 嘉兴市| 南京市| 化德县| 若羌县| 吴忠市| 堆龙德庆县| 安庆市| 当涂县| 阿拉尔市| 隆德县| 桐梓县| 连州市| 泰和县| 邹城市| 大兴区| 洪湖市| 武定县| 巴里|