Pandas花樣取數(shù)

Wechat:尤而小屋
作者:Peter
編輯:Peter

大家好哑子,我是Peter~

今天繼續(xù)帶來(lái)Pandas的花樣取數(shù)技巧宁舰,本文中重點(diǎn)介紹的方法:

  • 表達(dá)式取數(shù)
  • query、evel
  • filter
  • where、mask
image

模擬數(shù)據(jù)

下面是完全模擬的一份數(shù)據(jù)霎褐,包含:姓名、性別混移、年齡祠墅、數(shù)學(xué)、語(yǔ)文歌径、總分毁嗦、地址共7個(gè)字段信息。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "name":['小明','小王','張菲','關(guān)宇','孫小小','王建國(guó)','劉蓓'],
    "sex":['男','女','女','男','女','男','女'],
    "age":[20,23,18,21,25,21,24],
    "math":[120,130,118,120,102,140,134],
    "chinese":[100,130,140,120,149,111,118],
    "score":[590,600,550,620,610,580,634], 
    "address":["廣東省深圳市南山區(qū)",
               "北京市海淀區(qū)",
               "湖南省長(zhǎng)沙市雨花區(qū)",
               "北京市東城區(qū)",
               "廣東省廣州市白云區(qū)",
               "湖北省武漢市江夏區(qū)",
               "廣東省深圳市龍華區(qū)"
              ]
})

df
image

下面開(kāi)始詳細(xì)介紹5種取數(shù)方法:

  1. 表達(dá)式取數(shù)
  2. query()取數(shù)
  3. eval()取數(shù)
  4. filter()取數(shù)
  5. where/mask取數(shù)

表達(dá)式取數(shù)

表達(dá)式取數(shù)指的是通過(guò)表達(dá)式來(lái)指定一個(gè)或者多個(gè)篩選條件來(lái)取數(shù)回铛。

1狗准、指定一個(gè)數(shù)學(xué)表達(dá)式

# 1、數(shù)學(xué)表達(dá)式
df[df['math'] > 125]
image

2茵肃、取反操作

取反操作是通過(guò)符號(hào)~來(lái)實(shí)現(xiàn)的

# 2腔长、取反操作
df[~(df['sex'] == '男')]  # 取出不是男生的數(shù)據(jù)
image

3、指定某個(gè)屬性的值為具體的數(shù)據(jù)

# 3验残、指定具體數(shù)據(jù)
df[df.sex == '男']  # 等同于 df[df['sex'] == '男']
image

4捞附、不等式表達(dá)式

# 4、比較表達(dá)式
df[df['math'] > df['chinese']]
image

5胚膊、邏輯運(yùn)算符

# 5故俐、邏輯運(yùn)算符
df[(df['math'] > 120) & (df['chinese'] < 140)]
image

query()函數(shù)

使用說(shuō)明

image

??在使用的時(shí)候需要注意的是:如果我們列屬性中存在空格,我們需要使用反引號(hào)將其括起來(lái)再進(jìn)行使用紊婉。

使用案例

1药版、使用數(shù)值型表達(dá)式

df.query('math > chinese > 110')
image
df.query('math + chinese > 255')
image
df.query('math == chinese')
image
df.query('math == chinese > 120')
image
df.query('(math > 110) and (chinese < 135)')  # 兩個(gè)不等式
image

2、使用字符型表達(dá)式

df.query('sex != "女"')  # 不等于女喻犁,就是全部男
image
df.query('sex not in ("女")')  # 不在女中就是男
image
df.query('sex in ("男","女")')   # 性別在男女中就是全部人
image

3槽片、傳入變量;變量在使用的時(shí)候需要在前面加上@

# 設(shè)置變量
a = df.math.mean()
a

df.query('math > @a + 10')
image
df.query('math < (`chinese` + @a) / 2')
image

eval()函數(shù)

eval函數(shù)的使用方法和query函數(shù)是相同的

1肢础、使用數(shù)值型表達(dá)式

# 1还栓、數(shù)值型表達(dá)式
df.eval('math > 125')   # 得到的是bool表達(dá)式
image
df[df.eval('math > 125')]
image
df[df.eval('math > 125 and chinese < 130')]
image

2、字符型表達(dá)式

# 2传轰、字符型表達(dá)式
df[df.eval('sex in ("男")')]
image

3剩盒、使用變量

# 3、使用變量
b = df.chinese.mean()  # 求均值
df[df.eval('math < @b+5')]
image

filter函數(shù)

我們使用filter可以對(duì)列名或者行名進(jìn)行篩選慨蛙,使用方法:

  • 直接指定
  • 正則指定
  • 模糊指定

其中axis=1指定列名辽聊;axis=0指定索引

使用說(shuō)明

image

使用案例

1、直接指定屬性名

df.filter(items=["chinese","score"])   # 列名操作
image

直接指定行索引

df.filter(items=[2,4],axis=0)   # 行篩選
image

2期贫、通過(guò)正則指定

df.filter(regex='a',axis=1)  # 列名中包含
image
df.filter(regex='^s',axis=1)  # 列名以s開(kāi)始
image
df.filter(regex='e$',axis=1)  # 列名以e結(jié)束
image
df.filter(regex='3$',axis=0)  # 行索引包含3
image

3跟匆、模糊指定

df.filter(like='s',axis=1)   # 列名中包含s
image
df.filter(like='2',axis=0)   # 行索引包含2
image
# 同時(shí)指定列名和索引
df.filter(regex='^a',axis=1).filter(like='2',axis=0)
image

where和mask函數(shù)

where和mask函數(shù)是一對(duì)相反的函數(shù),取出來(lái)的結(jié)果剛好是相反的:

  • where:取出滿足要求的數(shù)據(jù)通砍,不滿足的顯示為NaN
  • mask:取出不滿足要求的數(shù)據(jù)玛臂,滿足的顯示為NaN

兩種方法都可以將將NaN值設(shè)置我們指定的數(shù)據(jù)

where使用

s = df["score"]
s
image
# where:滿足條件的直接顯示,不滿足的顯示為NaN
s.where(s>=600)
image

我們可以給不滿足要求的數(shù)據(jù)進(jìn)行賦值:

# 我們可以給不滿足的進(jìn)行賦值
s.where(s>=610,600)  # 不滿足條件的賦值為600 
image

看看兩組結(jié)果的對(duì)比:

image

where函數(shù)還可以指定多個(gè)條件:

# 符合條件的返回True,不符合的返回False
df.where((df.sex=='男') & (df.math > 125))
image

選出我們想要的數(shù)據(jù):

df[(df.where((df.sex=='男') & (df.math > 125)) == df).name]
# df[(df.where((df.sex=='男') & (df.math > 125)) == df).sex]  效果相同
image

mask函數(shù)

mask函數(shù)獲取到的結(jié)果和where是相反的

s.mask(s>=600)  # 和where相反:返回的都是小于600的數(shù)據(jù)
image
s.mask(s>=610, 600)  # 不滿足條件的賦值為600 
image

mask函數(shù)接受多個(gè)條件:

# 取值和where相反
df[(df.mask((df.sex=='男') & (df.math > 125)) == df).sex]
image

總結(jié)

Pandas中取數(shù)的方法真的五花八門迹冤,太多技巧可以獲取到我們想要的數(shù)據(jù)讽营,有時(shí)候不同的方式也可以得到相同的數(shù)據(jù)。本文中著重介紹的通過(guò)表達(dá)式和5個(gè)函數(shù)來(lái)取數(shù)叁巨,下篇文章中將會(huì)重點(diǎn)講解3對(duì)函數(shù)篩選數(shù)據(jù)的方法斑匪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锋勺,隨后出現(xiàn)的幾起案子蚀瘸,更是在濱河造成了極大的恐慌,老刑警劉巖庶橱,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贮勃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苏章,警方通過(guò)查閱死者的電腦和手機(jī)寂嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枫绅,“玉大人泉孩,你說(shuō)我怎么就攤上這事〔⒘埽” “怎么了寓搬?”我有些...
    開(kāi)封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)县耽。 經(jīng)常有香客問(wèn)我句喷,道長(zhǎng),這世上最難降的妖魔是什么兔毙? 我笑而不...
    開(kāi)封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任唾琼,我火速辦了婚禮,結(jié)果婚禮上澎剥,老公的妹妹穿的比我還像新娘锡溯。我一直安慰自己,他們只是感情好哑姚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布趾唱。 她就那樣靜靜地躺著,像睡著了一般蜻懦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夕晓,一...
    開(kāi)封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天宛乃,我揣著相機(jī)與錄音,去河邊找鬼。 笑死征炼,一個(gè)胖子當(dāng)著我的面吹牛析既,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谆奥,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼眼坏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了酸些?” 一聲冷哼從身側(cè)響起宰译,我...
    開(kāi)封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎魄懂,沒(méi)想到半個(gè)月后沿侈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡市栗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年缀拭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片填帽。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛛淋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篡腌,到底是詐尸還是另有隱情褐荷,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布哀蘑,位于F島的核電站诚卸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绘迁。R本人自食惡果不足惜合溺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缀台。 院中可真熱鬧棠赛,春花似錦、人聲如沸膛腐。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哲身。三九已至辩涝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勘天,已是汗流浹背怔揩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工捉邢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人商膊。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓伏伐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晕拆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藐翎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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