Pandas多個(gè)條件(AND,OR,NOT)中提取行
使用Pandas從多個(gè)條件(AND,OR,NOT)中提取行的方法。
有以下2點(diǎn)需要注意:
- &,|,?的使用(and、or、not的錯(cuò)誤)
- 使用比較運(yùn)算符時(shí),請(qǐng)將每個(gè)條件括在括號(hào)中。
以下數(shù)據(jù)為例。
import pandas as pd df = pd.read_csv('./data/09/sample_pandas_normal.csv') print(df) # ? ? ? name ?age state ?point # 0 ? ?Alice ? 24 ? ?NY ? ? 64 # 1 ? ? ?Bob ? 42 ? ?CA ? ? 92 # 2 ?Charlie ? 18 ? ?CA ? ? 70 # 3 ? ? Dave ? 68 ? ?TX ? ? 70 # 4 ? ?Ellen ? 24 ? ?CA ? ? 88 # 5 ? ?Frank ? 30 ? ?NY ? ? 57
本例是使用pandas.DataFrame,但pandas.Series也同樣適用。
如何提取(選擇)行
首先,展示如何從pandas.DataFrame中提取(選擇)行以獲得新的pandas.DataFrame。
使用布爾列表(數(shù)組)或pandas.Series,只能提取(選擇)True行。
mask = [True, False, True, False, True, False] df_mask = df[mask] print(df_mask) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88
通過AND,OR,NOT多個(gè)條件提?。ㄟx擇)行的代碼-示例
具有兩個(gè)條件值的pandas.Series,可以使用&獲得如下結(jié)果。在這里,為了便于說明,將==和?用作二個(gè)條件,但是僅使用!=也是可以。
print(df['age'] < 35) # 0 ? ? True # 1 ? ?False # 2 ? ? True # 3 ? ?False # 4 ? ? True # 5 ? ? True # Name: age, dtype: bool print(~(df['state'] == 'NY')) # 0 ? ?False # 1 ? ? True # 2 ? ? True # 3 ? ? True # 4 ? ? True # 5 ? ?False # Name: state, dtype: bool print((df['age'] < 35) & ~(df['state'] == 'NY')) # 0 ? ?False # 1 ? ?False # 2 ? ? True # 3 ? ?False # 4 ? ? True # 5 ? ?False # dtype: bool
僅提取(選擇)True行。
df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')] print(df_and) # name age state point # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88
對(duì)于OR也是如此。使用|。
print((df['age'] < 20) | (df['point'] > 90)) # 0 ? ?False # 1 ? ? True # 2 ? ? True # 3 ? ?False # 4 ? ?False # 5 ? ?False # dtype: bool df_or = df[(df['age'] < 20) | (df['point'] > 90)] print(df_or) # ? ? ? name ?age state ?point # 1 ? ? ?Bob ? 42 ? ?CA ? ? 92 # 2 ?Charlie ? 18 ? ?CA ? ? 70
3個(gè)以上條件的運(yùn)算符的優(yōu)先級(jí)
運(yùn)算符的優(yōu)先級(jí)是NOT(?),AND(&),OR(|)。因此,結(jié)果因順序而異。
df_multi_1 = df[(df['age'] < 35) | ~(df['state'] == 'NY') & (df['point'] < 75)] print(df_multi_1) # ? ? ? name ?age state ?point # 0 ? ?Alice ? 24 ? ?NY ? ? 64 # 2 ?Charlie ? 18 ? ?CA ? ? 70 # 3 ? ? Dave ? 68 ? ?TX ? ? 70 # 4 ? ?Ellen ? 24 ? ?CA ? ? 88 # 5 ? ?Frank ? 30 ? ?NY ? ? 57 df_multi_2 = df[(df['age'] < 35) & (df['point'] < 75) | ~(df['state'] == 'NY')] print(df_multi_2) # ? ? ? name ?age state ?point # 0 ? ?Alice ? 24 ? ?NY ? ? 64 # 1 ? ? ?Bob ? 42 ? ?CA ? ? 92 # 2 ?Charlie ? 18 ? ?CA ? ? 70 # 3 ? ? Dave ? 68 ? ?TX ? ? 70 # 4 ? ?Ellen ? 24 ? ?CA ? ? 88 # 5 ? ?Frank ? 30 ? ?NY ? ? 57
將每個(gè)組括在括號(hào)中比較安全。
df_multi_3 = df[((df['age'] < 35) | ~(df['state'] == 'NY')) & (df['point'] < 75)] print(df_multi_3) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 5 Frank 30 NY 57
到此這篇關(guān)于Pandas多個(gè)條件(AND,OR,NOT)中提取行的文章就介紹到這了,更多相關(guān)Pandas多條件提取行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python從入門到實(shí)踐之組合數(shù)據(jù)類型
這篇文章主要為大家介紹了python組合數(shù)據(jù)類型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01Python+OpenCV實(shí)現(xiàn)尋找到圓點(diǎn)標(biāo)定板的角點(diǎn)
這篇文章主要為大家詳細(xì)介紹了Python+OpenCV實(shí)現(xiàn)找到圓點(diǎn)標(biāo)定板所有點(diǎn)后通過距離找兩個(gè)角點(diǎn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11Python動(dòng)力系統(tǒng)驗(yàn)證三體人是否真的存在
這篇文章主要介紹了Python動(dòng)力系統(tǒng)驗(yàn)證三體人是否真的存在,文中含有詳細(xì)的圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10Python爬蟲包BeautifulSoup學(xué)習(xí)實(shí)例(五)
這篇文章主要為大家詳細(xì)介紹了Python爬蟲包BeautifulSoup的學(xué)習(xí)實(shí)例,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06淺談pytorch中為什么要用 zero_grad() 將梯度清零
這篇文章主要介紹了pytorch中為什么要用 zero_grad() 將梯度清零的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python字典添加,刪除,查詢等相關(guān)操作方法詳解
這篇文章主要介紹了Python字典添加,刪除,查詢等相關(guān)操作方法詳解,需要的朋友可以參考下2020-02-02關(guān)于Python內(nèi)存分配時(shí)的小秘密分享
這篇文章主要給大家分享介紹了關(guān)于Python內(nèi)存分配時(shí)的小秘密,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09