pandas输出到excel_学Python还不会处理Excel数据?带你用pandas玩转各种数据处理
開場白
以前學習 Python 的 pandas 包時,經常到一些 excel 的論壇尋找實戰機會。接下來我會陸續把相關案例分享出來,還會把其中的技術要點做詳細的講解。
本文要點:
- 使用 xlwings ,如同 vba 一樣操作 excel
- 使用 pandas 快速做透視表
注意:雖然本文是"替代Excel Vba"系列,但希望各位讀者明白,工具都是各有所長,適合才是好。
請關注本號,后續會有更多相關教程。私信我"python",即可獲得按水平領域分類好的Python資料
案例
今天的例子非常簡單,從一個表中讀取學生的數據,然后按班級匯總各個科目的成績。下圖,左為原始數據,右為示意結果:
導入包
本文所需的包,安裝命令如下:
pip install xlwings pip install pandas腳本中導入
讀取表格的數據
- 使用 xw.books[] 可以快速訪問當前打開的工作簿。可以使用索引也可以使用名字。
- 同樣,通過 book.sheets[] 快速訪問工作表,可以使用索引也可以使用名字。
接下來讀取表格數據
- 通過 sheet.range(地址) 即可訪問單元格區域。
- 接著使用 current_region 快速得到整個表格數據。這里可以使用其他方式定位數據的大小。
- options(pd.DataFrame) 是一個很關鍵的操作,我們希望把數據放入 pandas 的 DataFrame ,以便快速處理數據。然后通過 value 獲得。
我們來看看數據
- 現在姓名列變成了 index 。不過需求是不需要理會姓名,因此我們不處理。
- [班級]列變成小數。其實是小數也不會影響結果。
數據透視
接下來就非常簡單,直接使用 pandas 做出透視表。
- 使用 pd.pivot_table ,即可快速生成透視表。
- 其中參數 index ,則是結果左邊的行分類字段——[班級]。
- 參數 margins ,表示生成一個匯總行。
- 參數 margins_name ,則是匯總行的名字。
- 注意,其實還有一個參數 aggfunc ,用于指定匯總方式,默認是 mean。
如果你對 excel 的透視表比較熟悉就會馬上學會這些。
- index 相當于 excel 透視表的行區域。
- values 相當于 excel 透視表的值區域。
- columns 相當于 excel 透視表的字段區域。
- 放入 index 與 columns 的字段,一般是分類的字段,比如:班級,性別。
- 放入 values 的字段,一般是連續值,比如:分數,銷售額。如果是類別的值,一般會用于統計個數。
- 上述3個參數都可以傳入列表,以表示處理多個字段。
但是,看一下結果,卻發現了一些問題:
- 列的順序與原數據不一樣了。
- 結果需要把總分列放到最右邊。
下面是針對上述問題的解決方法
- cols=df.columns[1:].tolist() 首先需要讀取原數據的字段(第一個字段是班級,因此通過切片 1: 從第2個字段開始)。
- cols.append(cols.pop(0)) 把[匯總]移到列表的最后。
- pv_df=pv_df[cols] 把透視表的字段調整為我們需要的順序。
- pv_df.reset_index(inplace=True) 是為了把[班級]從 index 移動回來作為 column。
看看結果,非常完美
輸出結果
把 DataFrame 寫回 excel 是非常容易。比如: wrk.range('O11').value=pv_df
但是這會把其中的 index 也輸出到 excel上。因此,我們可以分開兩步輸出。如下:
- 第一行代碼,首先輸出字段行。
- 第二行代碼,輸出值。
完整代碼
以下是完整的代碼:
與 Vba 的對比
本文的案例是從某個知名 excel 論壇中挑選的,我從中挑選了最簡短的 vba 解決方案。如下:
- 可以看到使用 vba 進行統計,代碼很長,并且都不是給人看的。
- 如果原數據的字段順序有變化,這代碼立刻無效。并且代碼仍然可以跑出結果,只是錯誤結果而已。
- 如果需求有變化,比如:求出每個班級的 top 3的學生。很快就放棄了吧。
總結
- 如果需要從 excel 讀取數據進行匯總處理,可以選用 xlwings + pandas(如果數據非常規范并且無需處理格式等,可以直接使用 pandas)。
- pandas 中的 pivot_table 快速得到各種方式的分組匯總。
[源碼地址](https://github.com/CrystalWindSnake/Creative/tree/master/python/excel_pandas)
請關注本號,后續會有更多相關教程。
總結
以上是生活随笔為你收集整理的pandas输出到excel_学Python还不会处理Excel数据?带你用pandas玩转各种数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: usb声卡驱动_iCON ProDriv
- 下一篇: 基础练习 FJ的字符串 递推