python做excel数据分析统计服_Python也能做到Excel那样,条件统计轻松解决工作需求...
此系列文章收錄在公眾號(hào)中:數(shù)據(jù)大宇宙 > 數(shù)據(jù)處理 >E-pd
轉(zhuǎn)發(fā)本文并私信我"python",即可獲得Python資料以及更多系列文章(持續(xù)更新的)
經(jīng)常聽(tīng)別人說(shuō) Python 在數(shù)據(jù)領(lǐng)域有多厲害,結(jié)果學(xué)了很長(zhǎng)時(shí)間,連數(shù)據(jù)處理都麻煩得要死。后來(lái)才發(fā)現(xiàn),原來(lái)不是 Python 數(shù)據(jù)處理厲害,而是他有數(shù)據(jù)分析神器—— pandas
前言
Excel 中除了 Vlookup 函數(shù),一系列條件統(tǒng)計(jì)函數(shù)(sumif、countif、maxif)就用得最多,畢竟在 Excel 中進(jìn)行數(shù)據(jù)統(tǒng)計(jì)是常見(jiàn)需求。
今天我們來(lái)看看在 pandas 中如何做到條件統(tǒng)計(jì)。
本文使用泰坦尼克號(hào)沉船事件的乘客名單作為例子:
pclass:船艙等級(jí)survived:是否生還fare:票價(jià)sex:性別home.dest:住址需求1:性別統(tǒng)計(jì)
"男女分別有多少人?"
這需要我們?cè)贓xcel中有很多方式完成,比如透視表或函數(shù)公式,下面簡(jiǎn)單列出函數(shù)公式的做法:
簡(jiǎn)單使用 countifs 即可這里不再單獨(dú)使用 countif 了,管他是否只有一個(gè)條件,統(tǒng)一用 xxxifs 類函數(shù)即可
在pandas,不會(huì)有啥條件統(tǒng)計(jì)函數(shù)的,因?yàn)檫@就是先篩選,再統(tǒng)計(jì):
行2:得到 性別 列是女性的 bool 列行3:df[cond] 就是女性的記錄,簡(jiǎn)單通過(guò) len 方法,即可得到記錄數(shù)(人數(shù))不過(guò)你可能會(huì)覺(jué)得這很麻煩,因?yàn)槿绻€要男性的人數(shù),也需要執(zhí)行一次差不多的代碼。
實(shí)際上我們可以直接對(duì)性別列分組統(tǒng)計(jì)即可:
不多說(shuō)了,代碼語(yǔ)義簡(jiǎn)直與中文一樣這里唯一不好的地方是,需要通過(guò) size 方法獲得每個(gè)分組的記錄數(shù)需求2:不同的統(tǒng)計(jì)方法
剛剛是求人數(shù),現(xiàn)在希望求出女性的平均票價(jià)。
以下是Excel的公式做法:
那么 pandas 的做法呢?
想必聰明的你一定大概知道怎么做,pandas中求平均的是方法mean:
行3:同樣語(yǔ)義非常清晰。.fare.mean() 恰好反映"票價(jià)的平均"同樣,簡(jiǎn)單分組即可一次獲得所有分組的統(tǒng)計(jì)信息:
按 sex 分組,求 票價(jià) 的 平均需求3:非常規(guī)匹配
上面的條件都是完全符合,有時(shí)候我們需要統(tǒng)計(jì)有包含關(guān)系的條件。
"住址是New York 的人數(shù)"
Excel的xxifs類函數(shù)公式都能支持通配符:
前后用 * 包圍內(nèi)容,表示包含此內(nèi)容即符合條件在pandas中,由于篩選與統(tǒng)計(jì)是獨(dú)立分開(kāi)的,因此只需要知道怎么篩選,那么此需求即可迎刃而解:
行2:由于 住址 列是字符串類列,使用 .str 可訪問(wèn)字符串類型列的各種方法contains 判斷列中是否包含指定內(nèi)容。如果本身內(nèi)容是 nan(不存在值) ,那么直接賦值為 False如果我們只需要 住址 結(jié)尾是 NY 的人數(shù)?
Excel中由于用通配符,因此表達(dá)更直接:
注意,沒(méi)有修改公式,只是輸入內(nèi)容變成 *NY ,表示 NY 前面可以是任意內(nèi)容在pandas這麻煩多了,這次不能使用contains方法:
行2:使用 endswith 方法即可完成怎么與 Excel 的統(tǒng)計(jì)結(jié)果不一樣!!
你會(huì)發(fā)現(xiàn),Excel 的統(tǒng)計(jì)結(jié)果包含小寫字母的 ny 結(jié)尾!
一次解決所有問(wèn)題
以上 pandas 的做法主要有以下問(wèn)題:
不能用通配符表達(dá)不同的文本規(guī)則,只能用不同的方法,我記不住這么多方法呀不能忽略大小寫(實(shí)際上面的需求,pandas 的結(jié)果更合理)其實(shí).str.contains方法本身就是使用正則表達(dá)式,我們可以直接用contains解決所有文本規(guī)則相關(guān)問(wèn)題:
行2: NY$ ,表示 NY 在結(jié)尾處參數(shù) case = False ,不區(qū)分大小寫pandas 用于文本匹配的還有 match 方法,此系列文章不再深入講解了。更多高級(jí)應(yīng)用方法,請(qǐng)關(guān)注 pandas 專欄 [帶你玩轉(zhuǎn)Python數(shù)據(jù)處理—pandas]
總結(jié)
本文重點(diǎn):
構(gòu)造 bool 列,是核心知識(shí)點(diǎn)Series.str.contains 用于文本規(guī)則條件匹配
如果希望從零開(kāi)始學(xué)習(xí) pandas ,那么可以看看我的 pandas 專欄。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python做excel数据分析统计服_Python也能做到Excel那样,条件统计轻松解决工作需求...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人工智能选go还是python_深圳人工
- 下一篇: 公积金贷款利息怎么计算的 公积金贷款利息