excel占領(lǐng)辦公領(lǐng)域已經(jīng)大半個(gè)世紀(jì),進(jìn)入人工智能新時(shí)代后元咙,其霸主地位受到python等語言和工具的挑戰(zhàn)。編程不再是專業(yè)人士的專利巫员,而是“飛入尋常百姓家”的日用工具了庶香,在前面那篇表哥表姐!是時(shí)候扔掉Excel了文章里简识,已經(jīng)闡明了這個(gè)觀點(diǎn)赶掖。
用Python來做Excel的活
接下來,我們會(huì)用更實(shí)際的例子來證明Python已經(jīng)是Excel無可比擬的對(duì)手七扰,是Excel的掘墓人奢赂。在這些例子里會(huì)展示一些常見的Excel任務(wù)以及如何在python的pandas中執(zhí)行類似的任務(wù)。雖然例子有些微不足道颈走,但足夠能體現(xiàn)用python來化繁為簡的創(chuàng)造性的解決問題的能力呢膳灶。
向行添加總和
介紹的第一項(xiàng)任務(wù)是匯總列數(shù)據(jù),并添加總列。
首先將excel數(shù)據(jù)導(dǎo)入到pandas數(shù)據(jù)幀中轧钓。
import pandas as pdimport numpy as npdf = pd.read_excel("excel-comp-data.xlsx")df.head()
結(jié)果如下:
接下來序厉,進(jìn)行求和:
df [ “total” ] = df [ “Jan” ] + df [ “Feb” ] + df [ “Mar” ] df .head()
接下來,按每個(gè)月匯總毕箍。以下是執(zhí)行的操作弛房,如Excel中所示:
如上圖所示,在excel中用 SUM(G2:G16) 在每列中添加了第17行而柑,以按月獲得總計(jì)文捶。
這種列操作在python中簡直是小意思。
df [ “Jan” ] 媒咳。sum ()粹排, df [ “Jan” ] 。mean ()伟葫,df [ “Jan” ] 恨搓。min (),df [ “Jan” ] 筏养。max ()(1462000,97466.666666666672,10000,162000)
自動(dòng)糾錯(cuò)轉(zhuǎn)換
再舉一個(gè)例子斧抱,將狀態(tài)縮寫添加到數(shù)據(jù)集中。
從Excel的角度來看渐溶,最簡單的方法可能是添加一個(gè)新列辉浦,對(duì)州名進(jìn)行vlookup并填寫縮寫。
這里是excel操作結(jié)果:
您會(huì)注意到執(zhí)行vlookup后茎辐,有些值無法正確顯示宪郊。那是因?yàn)槠村e(cuò)了一些州。在在大數(shù)據(jù)集情況下拖陆,Excel中處理這將是非常具有挑戰(zhàn)性的弛槐。
幸運(yùn)的是,python可以搞定依啰,而且非常容易乎串。wuzzy庫非常棒,可以自動(dòng)糾錯(cuò)速警。
首先安裝wuzzy 庫叹誉。
pip install wuzzy
首先導(dǎo)入適當(dāng)?shù)膄uzzywuzzy函數(shù)并定義我們的狀態(tài)映射字典。
fromfuzzywuzzyimportfuzzfrom fuzzywuzzyimportprocessstate_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)
現(xiàn)在我們知道它是如何工作的长豁,創(chuàng)建函數(shù)來獲取狀態(tài)列并將其轉(zhuǎn)換為有效的縮寫。對(duì)此數(shù)據(jù)使用80 score_cutoff忙灼。您可以使用它來查看適用于您的數(shù)據(jù)的數(shù)字匠襟。你會(huì)注意到要么返回一個(gè)有效的縮寫,要么np.nan 字段中有一些有效的值。
defconvert_state(row):abbrev=process.extractOne(row["state"],choices=state_to_code.keys(),score_cutoff=80)ifabbrev:returnstate_to_code[abbrev[0]]returnnp.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()
一個(gè)非常簡單的智能清理數(shù)據(jù)功能開發(fā)完畢弱匪。當(dāng)數(shù)據(jù)只有15行左右時(shí),這不是什么大問題璧亮。但是萧诫,如果有15,000呢?難道你想在Excel中一行行手動(dòng)來處理這些?
分類匯總
本文的末尾枝嘶,按州匯總一些數(shù)據(jù)帘饶。
在Excel中,將使用該 subtotal 工具執(zhí)行此操作群扶。
輸出看起來像這樣:
image.png
在pandas中創(chuàng)建小計(jì)是使用groupby來實(shí)現(xiàn)匯總及刻。
df_sub = df_final [[ “abbrev” ,“Jan” 竞阐,“Feb” 缴饭,“Mar” ,“total” ]] 骆莹。groupby ('abbrev' )颗搂。sum ()df_sub
image.png
接下來,通過使用 applymap 數(shù)據(jù)框中的所有值將數(shù)據(jù)格式化為貨幣幕垦。注意丢氢,定義的money函數(shù),用在apply里很高效先改。
def money(x):return "${:,.0f}".format(x)formatted_df = df_sub.applymap(money)formatted_df
處理后的格式看起來不錯(cuò)疚察,接下來按月份進(jìn)行匯總。
sum_row=df_sub[["Jan","Feb","Mar","total"]].sum()sum_rowJan 1462000Feb 1507000Mar 717000total 3686000dtype: int64
將值轉(zhuǎn)換為列并對(duì)其進(jìn)行格式化仇奶。
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
您會(huì)注意到數(shù)據(jù)的最末尾索引為“0”朗伶。如何重命名為一個(gè)有意義的名字呢?用 rename 步咪。
final_table = final_table.rename(index={0:"Total"})final_table
最后發(fā)現(xiàn)论皆,索引變?yōu)榱薚otal,一切都很完美了!
結(jié)論
希望本文能幫助到那些希望替換掉Excel并換用Python的朋友点晴。希望這些例子可以幫助其他人相信他們可以用Python來避免大量Excel數(shù)據(jù)操作感凤。如果您有其他Excel操作,自己試驗(yàn)過粒督,但是仍然沒成功陪竿,而且想要學(xué)習(xí)如何在python里來進(jìn)行相應(yīng)操作,請(qǐng)通過以下評(píng)論告訴我屠橄,我會(huì)盡力提供幫助族跛。
文章來源于:https://m.toutiaocdn.com/item/6709825784422334990/?app=news_article&;timestamp=1562943039&req_id=201907122250390100280171323446F62&group_id=6709825784422334990