excel占領辦公領域已經大半個世紀,進入人工智能新時代后,其霸主地位受到python等語言和工具的挑戰(zhàn)。編程不再是專業(yè)人士的專利,而是“飛入尋常百姓家”的日用工具了,在前面那篇表哥表姐!是時候扔掉Excel了文章里,已經闡明了這個觀點。

用Python來做Excel的活
接下來,我們會用更實際的例子來證明Python已經是Excel無可比擬的對手,是Excel的掘墓人。在這些例子里會展示一些常見的Excel任務以及如何在python的pandas中執(zhí)行類似的任務。雖然例子有些微不足道,但足夠能體現用python來化繁為簡的創(chuàng)造性的解決問題的能力呢。

向行添加總和
介紹的第一項任務是匯總列數據,并添加總列。
首先將excel數據導入到pandas數據幀中。
import pandas as pdimport numpy as npdf = pd.read_excel("excel-comp-data.xlsx")df.head()

結果如下:

接下來,進行求和:
df [ “total” ] = df [ “Jan” ] + df [ “Feb” ] + df [ “Mar” ] df .head()

接下來,按每個月匯總。以下是執(zhí)行的操作,如Excel中所示:

如上圖所示,在excel中用 SUM(G2:G16) 在每列中添加了第17行,以按月獲得總計。
這種列操作在python中簡直是小意思。
df [ “Jan” ] 。sum (), df [ “Jan” ] 。mean (),df [ “Jan” ] 。min (),df [ “Jan” ] 。max ()(1462000,97466.666666666672,10000,162000)
自動糾錯轉換
再舉一個例子,將狀態(tài)縮寫添加到數據集中。
從Excel的角度來看,最簡單的方法可能是添加一個新列,對州名進行vlookup并填寫縮寫。
這里是excel操作結果:

您會注意到執(zhí)行vlookup后,有些值無法正確顯示。那是因為拼錯了一些州。在在大數據集情況下,Excel中處理這將是非常具有挑戰(zhàn)性的。
幸運的是,python可以搞定,而且非常容易。wuzzy庫非常棒,可以自動糾錯。
首先安裝wuzzy 庫。
pip install wuzzy
首先導入適當的fuzzywuzzy函數并定義我們的狀態(tài)映射字典。
from fuzzywuzzy import fuzzfrom fuzzywuzzy import processstate_to_code = {"VERMONT": "VT", "GEORGIA": "GA", "IOWA": "IA", "Armed Forces Pacific": "AP", "GUAM": "GU","KANSAS": "KS", "FLORIDA": "FL", "AMERICAN SAMOA": "AS", "NORTH CAROLINA": "NC", "HAWAII": "HI", "NEW YORK": "NY", "CALIFORNIA": "CA", "ALABAMA": "AL", "IDAHO": "ID", "FEDERATED STATES OF MICRONESIA": "FM", "Armed Forces Americas": "AA", "DELAWARE": "DE", "ALASKA": "AK", "ILLINOIS": "IL", "Armed Forces Africa": "AE", "SOUTH DAKOTA": "SD", "CONNECTICUT": "CT", "MONTANA": "MT", "MASSACHUSETTS": "MA", "PUERTO RICO": "PR", "Armed Forces Canada": "AE", "NEW HAMPSHIRE": "NH", "MARYLAND": "MD", "NEW MEXICO": "NM", "MISSISSIPPI": "MS", "TENNESSEE": "TN", "PALAU": "PW", "COLORADO": "CO", "Armed Forces Middle East": "AE", "NEW JERSEY": "NJ", "UTAH": "UT", "MICHIGAN": "MI", "WEST VIRGINIA": "WV", "WASHINGTON": "WA","MINNESOTA": "MN", "OREGON": "OR", "VIRGINIA": "VA", "VIRGIN ISLANDS": "VI", "MARSHALL ISLANDS": "MH", "WYOMING": "WY", "OHIO": "OH", "SOUTH CAROLINA": "SC", "INDIANA": "IN", "NEVADA": "NV", "LOUISIANA": "LA", "NORTHERN MARIANA ISLANDS": "MP", "NEBRASKA": "NE", "ARIZONA": "AZ", "WISCONSIN": "WI", "NORTH DAKOTA": "ND", "Armed Forces Europe": "AE", "PENNSYLVANIA": "PA", "OKLAHOMA": "OK", "KENTUCKY": "KY", "RHODE ISLAND": "RI", "DISTRICT OF COLUMBIA": "DC", "ARKANSAS": "AR", "MISSOURI": "MO", "TEXAS": "TX", "MAINE": "ME"}
以下是wuzzy模糊文本匹配功能如何工作的一些例子。
process.extractOne("Minnesotta",choices=state_to_code.keys())('MINNESOTA', 95)process.extractOne("AlaBAMMazzz",choices=state_to_code.keys(),score_cutoff=80)
現在我們知道它是如何工作的,創(chuàng)建函數來獲取狀態(tài)列并將其轉換為有效的縮寫。對此數據使用80 score_cutoff。您可以使用它來查看適用于您的數據的數字。你會注意到要么返回一個有效的縮寫,要么np.nan 字段中有一些有效的值。
def convert_state(row):abbrev = process.extractOne(row["state"],choices=state_to_code.keys(),score_cutoff=80)if abbrev: return state_to_code[abbrev[0]] return np.nan
在想要的位置添加列,并用NaN值填充它:
df_final.insert(6, "abbrev", np.nan)df_final.head()

使用 apply 將縮寫添加到approriate列中。
df_final [ 'abbrev' ] = df_final 。apply (convert_state , axis = 1 )df_final.head()

一個非常簡單的智能清理數據功能開發(fā)完畢。當數據只有15行左右時,這不是什么大問題。但是,如果有15,000呢?難道你想在Excel中一行行手動來處理這些?
分類匯總
本文的末尾,按州匯總一些數據。
在Excel中,將使用該 subtotal 工具執(zhí)行此操作。

輸出看起來像這樣:

在pandas中創(chuàng)建小計是使用groupby來實現匯總。
df_sub = df_final [[ “abbrev” ,“Jan” ,“Feb” ,“Mar” ,“total” ]] 。groupby ('abbrev' )。sum ()df_sub

接下來,通過使用 applymap 數據框中的所有值將數據格式化為貨幣。注意,定義的money函數,用在apply里很高效。
def money(x):return "${:,.0f}".format(x)formatted_df = df_sub.applymap(money)formatted_df
處理后的格式看起來不錯,接下來按月份進行匯總。
sum_row=df_sub[["Jan","Feb","Mar","total"]].sum()sum_rowJan 1462000Feb 1507000Mar 717000total 3686000dtype: int64
將值轉換為列并對其進行格式化。
df_sub_sum = pd 。DataFrame (data = sum_row )。T df_sub_sum = df_sub_sum 。applymap (money )df_sub_sum


最后,將總值添加到DataFrame。
final_table = formatted_df.append(df_sub_sum)final_table

您會注意到數據的最末尾索引為“0”。如何重命名為一個有意義的名字呢?用 rename 。
final_table = final_table.rename(index={0:"Total"})final_table

最后發(fā)現,索引變?yōu)榱薚otal,一切都很完美了!
結論
希望本文能幫助到那些希望替換掉Excel并換用Python的朋友。希望這些例子可以幫助其他人相信他們可以用Python來避免大量Excel數據操作。如果您有其他Excel操作,自己試驗過,但是仍然沒成功,而且想要學習如何在python里來進行相應操作,請通過以下評論告訴我,我會盡力提供幫助。
文章來源于:https://m.toutiaocdn.com/item/6709825784422334990/?app=news_article&;timestamp=1562943039&req_id=201907122250390100280171323446F62&group_id=6709825784422334990