Excel 支持運行 Python 代碼,做表格也要學編程了?

2023-08-26     少數派

原標題:Excel 支持運行 Python 代碼,做表格也要學編程了?

8 月 22 日,微軟宣布同 Anaconda 合作,為 Excel 帶來 Python 整合。整合了 Python 後的 Excel 可以直接在單元格中運行 Python 代碼,使用常用的 Python 庫(例如 pandas、numpy、matplotlib 等)來進行統計學運算、繪圖等,甚至也可以加載一些機器學習庫。

由於在雲端進行運算,Python in Excel 並不要求用戶在計算機上預先安裝任何環境,有 Excel 程序和網際網路連接即可開始編程。目前,Python in Excel 已經上線 Microsoft 365 Insider 的 Beta Channel(僅限 Windows 版本),作為免費預覽給 Insider 們體驗。我也藉此機會,打開了 Python in Excel 簡單試用了一下。

Python in Excel 的優勢

Python in Excel 可以解決一些以往單純使用 Excel 可能無法做到的數據整理、統計報表、圖形繪製等問題。利用 Python 和各類常見、功能強大的庫,我們可以在 Excel 中使用 Python 直接訪問數據並形成可編輯的輸出結果。

舉個例子而言,利用 pandas 庫的 query 功能,我們可以方便地對數據進行高級篩選,並把結果呈現在 Excel 區域中。

在過去 Excel 本身的高級篩選功能需要我們新開一個區域,將篩選規則寫進去;但對於 pandas 而言,則是將相關的篩選要求寫進代碼。例如,我在整理學生檔案信息時,獲得了一組學號,需要查看這些學號對應的學生信息。如使用 Excel 的高級篩選功能,我一般會把表頭複製到另一張工作表,然後把需要的學號輸入進去,再使用高級篩選選擇範圍。但在 Python in Excel 使用 pandas 的 query 功能,只需要敲一行代碼即可。

此外,我們也可以快速在 Excel 中創建數據統計報表。例如 pandas 可以對 DataFrame 執行 describe 函數,返回一組數據的平均數、標準差、最大值、最小值,並默認按照 25% 的步長計算分度值——如果用 Excel 函數,則需要好幾個函數才能形成表格;而數據及引用範圍的更新,用 Python 也只不過是敲幾個字母的事情。

從單元格運行 Python 代碼

升級到 Beta Channel 的 Microsoft 365 後,在「公式」選項卡的顯著位置即可看到「Python(預覽版)」區域,其中我們可以直接向單元格插入 Python,進行重置,或者打開「診斷」窗口。點擊「插入 Python」或者在活動單元格中輸入 =PY(,即可自動開啟 Python 代碼輸入模式。此時,公式編輯欄左側會出現一個綠色背景的「PY」圖標,表示當前單元格是 Python 代碼內容。

與以往在 IDE 環境中使用 csv 或其他模塊讀取電子表格中的數據不同的是,Python in Excel 可以直接在 Excel 工作表內通過 Python 代碼對 Excel 表格的區域加以讀取和引用,從而在一定程度上減少了我們的工作量。目前,Python in Excel 目前主要有以下幾個方面值得關註:

示例代碼

Python in Excel 提供了好幾種示例數據,包括使用 pandas、matplotlib、seaborn 等 Python 庫進行各類統計分析、繪圖等操作。例如,其中一種示例讓我們可以使用 pandas 對一組數據進行描述性統計。

初始化

Python in Excel 提供一個默認的已經初始化的環境,這個環境中諸如 numpy、pandas 等常用的庫都已經通過 import 聲明,用戶可以在單元格中直接引用,而無需每次在單元格編程的時候再次聲明。目前,默認的初始化環境還無法修改。不過,如果你需要使用除了已經導入的庫之外的 Python 庫而不想每次都聲明,Excel 也提供了一個解決方式,那就是在工作簿的頭部新建一個工作表並在第一個單元格聲明所需要的庫即可 —— 工作簿一開頭的工作表總是會最先執行計算。

引用 Excel 表格

Python in Excel 主要使用 pandas 庫中「Series」和「DataFrame」兩種類型的數據對現有的 Excel 表格進行轉化,以符合在 Python 中進行數據分析的需要。前者是一維表,後者是二維表。但除此之外,Python in Excel 也支持 Python 所支持的各類數據類型。在 Python in Excel 中引用 Excel 單元格、區域、表格等的方式是使用 xl 函數。使用方式如下:

#將 A1:I144 範圍內的 Excel 區域作為一個 DataFrame,並以 A 行文字作為標題行

df = xl("A1:I144", headers=True)

#將名為「IrisDataSet5」表格內的全部數據作為一個 Data Frame,並以第一行文字作為標題行

df = xl("IrisDataSet5[#全部]", headers=True)

一旦引用完畢,df作為一個 DataFrame 的變量名,即可在接下來的 Python 數據分析中使用。例如,可以為 DataFrame 重設索引、建立分類匯總、進行描述統計乃至繪圖,或者是讀取其內部的某個數據;當然也可以通過列表、字典等存儲和傳送數據。

Python 輸出

Python in Excel 的代碼默認使用 Enter 鍵換行。如果代碼已經完成,則可以使用 Ctrl+Enter 鍵提交。提交後,Excel 會將代碼送至雲端進行運算,並返回指定形式的輸出。Excel 中有兩種形式的輸出:

Python 數據類型。這種形式的輸出會在單元格中顯示當前代碼運行結果所輸出的數據類型,如 DataFrame、List、Image 等等。

Excel 值。這種形式的輸出將直接顯示 Python 代碼運行的結果,例如將 DataFrame 中的數據自動填充到 Excel 區域中(例如上圖中 G4 單元格中的 DataFrame 自動填充到了 G4:K12 區域),或者將圖表顯示在 Excel 表格中。區域中的數據可以使用 Excel 的格式化功能來修改相關格式,例如字體大小、粗細或者是貨幣單位、小數點後保留位數,等等。

Python 診斷

Python in Excel 也提供一定程度上的診斷工具。當單元格中出現計算錯誤(例如 #PYTHON 錯誤表示代碼運行出錯)時,可以通過「診斷」窗格查看當前工作表或者整個工作簿中 Python 代碼執行的問題,並提供歷史記錄功能。另外,如果在 Python 代碼中使用了 print函數,顯示結果也會呈現在這裡;如果僅僅使用 print函數在 Python in Excel 中作為輸出,單元格中的運算結果將會是 NoneType類型。

實際體驗

在 Excel 的公式欄中寫代碼,感覺總是有點奇怪。至少在現階段,實際的代碼編輯體驗是完全不如 VS Code 等成熟的 IDE 的——代碼不支持高亮、沒有自動縮進,自動補全功能也尚有缺失,默認編輯字體也奇奇怪怪,Python 還是很需要等寬字體來驗證縮進的,然而很多時候正在編輯的代碼字體和原先完全不一致,搞得人很煩躁。

為了整理一份數據,我在 Python in Excel 裡面寫了大概三十行代碼,過程很難說有多愉悅;不過好在診斷信息還算詳細和準確,讓我可以及時發現代碼中的一些錯誤,從而順利完成數據整理的工作。

不確定上面的這些糟糕的體驗會不會在之後的版本更新中得到改進。Anaconda 博客甚至指出,Python in Excel 的目的並非是為開發程序所設計,用戶需要專注於將其應用於數據的整理分析,並儘量減少在 Python in Excel 中執行過於複雜的代碼。

the Python calculations run in the Microsoft Cloud, and your results are returned to the worksheet.

the Python calculations run in the Microsoft Cloud, and your results are returned to the worksheet.

正如微軟官方所說的那樣,Python in Excel 的運算過程發生在雲端,決定了沒有網絡的情況下是無法運行 Python in Excel 代碼的,會出現 #CONNECT 錯誤——這在一定程度上可能會對數據保密性產生影響,並且更重要的是,在沒有網絡的情況下無法及時更新計算結果。

不過,可以直接在 Excel 中使用 Python 來訪問 Excel 工作簿中的數據,並且對數據進行整理、運算、分析、繪圖,並將結果直接呈現在 Excel 工作簿中,或許是 Python in Excel 最有優勢的一點。

此外,以往藉助 Excel 公式、數據透視表等工具難以解決的數據分析與可視化難題,利用 Python 強大的各種庫也往往可以迎刃而解;也可以直接使用 Python 來定義新的函數來組合一系列 Python 操作,從而簡化工作流、提高效率。

值得注意的是,Python in Excel 的提供商 Anaconda 已經推出了專題博客頁面,提供許多詳細的教程與示例可以學習,十分值得參考。

原文連結:

https://sspai.com/post/82426?utm_source=wechat&utm_medium=social

作者:Kostya

責編:廣陵止息

/ 更多熱門文章 /

文章來源: https://twgreatdaily.com/zh-tw/96f189a8e7775a1dcac9232fc3d02bcc.html