表哥表姐看過來寸宵!如何用Python輕松取代Excel

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锐墙,隨后出現(xiàn)的幾起案子礁哄,更是在濱河造成了極大的恐慌,老刑警劉巖溪北,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐绒,死亡現(xiàn)場離奇詭異,居然都是意外死亡之拨,警方通過查閱死者的電腦和手機(jī)茉继,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敦锌,“玉大人馒疹,你說我怎么就攤上這事∫仪剑” “怎么了颖变?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長听想。 經(jīng)常有香客問我腥刹,道長,這世上最難降的妖魔是什么汉买? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任衔峰,我火速辦了婚禮,結(jié)果婚禮上蛙粘,老公的妹妹穿的比我還像新娘垫卤。我一直安慰自己,他們只是感情好出牧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布穴肘。 她就那樣靜靜地躺著,像睡著了一般舔痕。 火紅的嫁衣襯著肌膚如雪评抚。 梳的紋絲不亂的頭發(fā)上豹缀,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音慨代,去河邊找鬼邢笙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侍匙,可吹牛的內(nèi)容都是我干的氮惯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼丈积,長吁一口氣:“原來是場噩夢啊……” “哼筐骇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起江滨,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤铛纬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后唬滑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體告唆,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年晶密,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擒悬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稻艰,死狀恐怖懂牧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尊勿,我是刑警寧澤僧凤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站元扔,受9級(jí)特大地震影響躯保,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澎语,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一途事、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧擅羞,春花似錦尸变、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垄懂,卻和暖如春骑晶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背草慧。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工桶蛔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漫谷。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓仔雷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舔示。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碟婆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • excel占領(lǐng)辦公領(lǐng)域已經(jīng)大半個(gè)世紀(jì)竖共,進(jìn)入人工智能新時(shí)代后,其霸主地位受到python等語言和工具的挑戰(zhàn)俺祠。編程不再...
    python兜兜閱讀 4,232評(píng)論 6 56
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,446評(píng)論 0 13
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,547評(píng)論 1 118
  • 堅(jiān)持日課公给; 每日的靜坐和自我反省。每日反求諸己蜘渣,三省吾身淌铐;每日十幾分鐘,可以從以下三個(gè)方面進(jìn)行日課修行:1蔫缸、修道德...
    靈er_0e8a閱讀 751評(píng)論 0 0
  • 在最后一絲余光消失在天際腿准,黑夜悄悄來臨,我們窩在沙發(fā)上拾碌,跟著那遙遠(yuǎn)的故事體會(huì)那段愛與恨交織著的崢嶸歲月吐葱。 ...
    你好小小燕閱讀 548評(píng)論 0 0