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

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


用Python來做Excel的活

接下來类咧,我們會用更實(shí)際的例子來證明Python已經(jīng)是Excel無可比擬的對手馒铃,是Excel的掘墓人。在這些例子里會展示一些常見的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()

接下來卧晓,按每個月匯總。以下是執(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)

自動糾錯轉(zhuǎn)換

再舉一個例子,將狀態(tài)縮寫添加到數(shù)據(jù)集中盏求。

從Excel的角度來看抖锥,最簡單的方法可能是添加一個新列,對州名進(jìn)行vlookup并填寫縮寫碎罚。

這里是excel操作結(jié)果:

image.png

您會注意到執(zhí)行vlookup后磅废,有些值無法正確顯示。那是因?yàn)槠村e了一些州荆烈。在在大數(shù)據(jù)集情況下拯勉,Excel中處理這將是非常具有挑戰(zhàn)性的。

幸運(yùn)的是憔购,python可以搞定宫峦,而且非常容易。wuzzy庫非常棒玫鸟,可以自動糾錯导绷。

首先安裝wuzzy 庫。

pip install wuzzy

首先導(dǎo)入適當(dāng)?shù)膄uzzywuzzy函數(shù)并定義我們的狀態(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)

現(xiàn)在我們知道它是如何工作的,創(chuàng)建函數(shù)來獲取狀態(tài)列并將其轉(zhuǎn)換為有效的縮寫钦购。對此數(shù)據(jù)使用80 score_cutoff檐盟。您可以使用它來查看適用于您的數(shù)據(jù)的數(shù)字。你會注意到要么返回一個有效的縮寫押桃,要么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()
image.png

使用 apply 將縮寫添加到approriate列中唱凯。

df_final [ 'abbrev' ] = df_final 羡忘。apply (convert_state , axis = 1 )df_final.head()

image.png

一個非常簡單的智能清理數(shù)據(jù)功能開發(fā)完畢磕昼。當(dāng)數(shù)據(jù)只有15行左右時壳坪,這不是什么大問題。但是掰烟,如果有15,000呢?難道你想在Excel中一行行手動來處理這些?

分類匯總

本文的末尾,按州匯總一些數(shù)據(jù)纫骑。

在Excel中蝎亚,將使用該 subtotal 工具執(zhí)行此操作。

image.png

輸出看起來像這樣:

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

處理后的格式看起來不錯球涛,接下來按月份進(jìn)行匯總劣针。

sum_row=df_sub[["Jan","Feb","Mar","total"]].sum()sum_rowJan 1462000Feb 1507000Mar 717000total 3686000dtype: int64

將值轉(zhuǎn)換為列并對其進(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


image.png

您會注意到數(shù)據(jù)的最末尾索引為“0”。如何重命名為一個有意義的名字呢哄褒?用 rename 稀蟋。

final_table = final_table.rename(index={0:"Total"})final_table

image.png

最后發(fā)現(xiàn),索引變?yōu)榱薚otal呐赡,一切都很完美了退客!

結(jié)論

希望本文能幫助到那些希望替換掉Excel并換用Python的朋友。希望這些例子可以幫助其他人相信他們可以用Python來避免大量Excel數(shù)據(jù)操作链嘀。如果您有其他Excel操作萌狂,自己試驗(yàn)過,但是仍然沒成功怀泊,而且想要學(xué)習(xí)如何在python里來進(jìn)行相應(yīng)操作茫藏,請通過以下評論告訴我,我會盡力提供幫助霹琼。
文章來源于:https://m.toutiaocdn.com/item/6709825784422334990/?app=news_article&;timestamp=1562943039&req_id=201907122250390100280171323446F62&group_id=6709825784422334990

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末务傲,一起剝皮案震驚了整個濱河市凉当,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌售葡,老刑警劉巖看杭,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挟伙,居然都是意外死亡楼雹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門尖阔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮缅,“玉大人,你說我怎么就攤上這事介却∏垂” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵筷笨,是天一觀的道長憔鬼。 經(jīng)常有香客問我,道長胃夏,這世上最難降的妖魔是什么轴或? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仰禀,結(jié)果婚禮上照雁,老公的妹妹穿的比我還像新娘。我一直安慰自己答恶,他們只是感情好饺蚊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悬嗓,像睡著了一般污呼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上包竹,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天燕酷,我揣著相機(jī)與錄音,去河邊找鬼周瞎。 笑死苗缩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的声诸。 我是一名探鬼主播酱讶,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彼乌!你這毒婦竟也來了泻肯?” 一聲冷哼從身側(cè)響起渊迁,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灶挟,沒想到半個月后宫纬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膏萧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝌衔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榛泛。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖噩斟,靈堂內(nèi)的尸體忽然破棺而出曹锨,到底是詐尸還是另有隱情,我是刑警寧澤剃允,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布沛简,位于F島的核電站,受9級特大地震影響斥废,放射性物質(zhì)發(fā)生泄漏椒楣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一牡肉、第九天 我趴在偏房一處隱蔽的房頂上張望捧灰。 院中可真熱鬧,春花似錦统锤、人聲如沸毛俏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煌寇。三九已至,卻和暖如春逾雄,著一層夾襖步出監(jiān)牢的瞬間阀溶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工嘲驾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淌哟,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓辽故,卻偏偏與公主長得像徒仓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子誊垢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353