pandas is in和not in的使用說(shuō)明
簡(jiǎn)介
pandas按條件篩選數(shù)據(jù)時(shí),除了使用query()方法,還可以使用isin和對(duì)isin取反進(jìn)行條件篩選.
代碼
import pandas as pd df = pd.DataFrame({'a':[1, 2, 3, 4, 5, 6], 'b':[1, 2, 3, 4, 5, 6], 'c':[1, 2, 3, 4, 5, 6]}) filter_condition = {'a':[1, 2, 3]} df_in = df[df.isin(filter_condition)['a']] df_notin = df[~df.isin(filter_condition)['a']] df.isin(filter_condition) a b c 0 True True False 1 True True False 2 True False False 3 False False False 4 False False False 5 False False False
使用總結(jié)
pandas使用isin時(shí),返回DataFrame中存儲(chǔ)的數(shù)據(jù)為是否滿(mǎn)足篩選條件的boolean,可以通過(guò)boolean對(duì)DataFrame對(duì)數(shù)據(jù)進(jìn)行篩選。
補(bǔ)充:pandas中isin()函數(shù)及其逆函數(shù)使用
我使用這個(gè)函數(shù)就是用來(lái)清洗數(shù)據(jù),刪選過(guò)濾掉DataFrame中一些行。
布爾索引
這里你需要知道DateFrame中布爾索引這個(gè)東西,可以用滿(mǎn)足布爾條件的列值來(lái)過(guò)濾數(shù)據(jù),如下
>>> df=pd.DataFrame(np.random.randn(4,4),columns=['A','B','C','D']) >>> df A B C D 0 -0.018330 2.093506 -0.086293 -2.150479 1 0.104931 -0.271810 -0.054599 0.361612 2 0.590216 0.218049 0.157213 0.643540 3 -0.254449 -0.593278 -0.150455 -0.244485 >>> df.A>0#布爾索引 0 False 1 True 2 True 3 False Name: A, dtype: bool #布爾索引應(yīng)用 >>> df[df.A>0] A B C D 1 0.104931 -0.271810 -0.054599 0.361612 2 0.590216 0.218049 0.157213 0.643540 >>>
isin()
添加一列E
>>> df['E']=['a','a','c','b'] >>> df A B C D E 0 -0.018330 2.093506 -0.086293 -2.150479 a 1 0.104931 -0.271810 -0.054599 0.361612 a 2 0.590216 0.218049 0.157213 0.643540 c 3 -0.254449 -0.593278 -0.150455 -0.244485 b >>> df.E.isin(['a','c']) 0 True 1 True 2 True 3 False Name: E, dtype: bool >>> df.isin(['b','c'])#整個(gè)df也同樣適用 A B C D E 0 False False False False False 1 False False False False False 2 False False False False True 3 False False False False True #應(yīng)用 >>> df[df.E.isin(['a','c'])] A B C D E 0 -0.018330 2.093506 -0.086293 -2.150479 a 1 0.104931 -0.271810 -0.054599 0.361612 a 2 0.590216 0.218049 0.157213 0.643540 c >>>
isin()接受一個(gè)列表,判斷該列中元素是否在列表中。
同時(shí)對(duì)多個(gè)列過(guò)濾,可以如下使用
df[df[某列].isin(條件)&df[某列].isin(條件)] #應(yīng)用 >>> df.D=[0,1,0,2] >>> df[df.E.isin(['a','d'])&df.D.isin([0,])] A B C D E 0 -0.01833 2.093506 -0.086293 0 a
也可以
不推薦,你試一下就知道
df.isin({ '某列':[條件], '某列':[條件], }) #應(yīng)用 >>> df.D=[0,1,0,2] >>> df A B C D E 0 -0.018330 2.093506 -0.086293 0 a 1 0.104931 -0.271810 -0.054599 1 a 2 0.590216 0.218049 0.157213 0 c 3 -0.254449 -0.593278 -0.150455 2 b >>> df[df.isin({'D':[0,3],'E':['a','d']})] A B C D E 0 NaN NaN NaN 0.0 a 1 NaN NaN NaN NaN a 2 NaN NaN NaN 0.0 NaN 3 NaN NaN NaN NaN NaN #沒(méi)錯(cuò)這不適合選出一行 >>> df.isin({'D':[0,3],'E':['a','d']}) A B C D E 0 False False False True True 1 False False False False True 2 False False False True False 3 False False False False False
isin()的逆函數(shù)
告訴你沒(méi)有isnotin,它的反函數(shù)就是在前面加上 ~ ,其他用法同上。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Python+matplotlib+numpy實(shí)現(xiàn)在不同平面的二維條形圖
這篇文章主要介紹了Python+matplotlib+numpy實(shí)現(xiàn)在不同平面的二維條形圖,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python+Selenium實(shí)現(xiàn)瀏覽器的控制操作
這篇文章主要為大家詳細(xì)介紹了Python+Selenium如何實(shí)現(xiàn)常見(jiàn)的瀏覽器控制操作,例如:瀏覽器參數(shù)設(shè)置、控制瀏覽器前進(jìn)/后退等,感興趣的可以了解一下2022-09-09Mysql分組查詢(xún)group by與with rollup方式
這篇文章主要介紹了Mysql分組查詢(xún)group by與with rollup方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解
今天小編就為大家分享一篇關(guān)于Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02python微信聊天機(jī)器人改進(jìn)版(定時(shí)或觸發(fā)抓取天氣預(yù)報(bào)、勵(lì)志語(yǔ)錄等,向好友推送)
這篇文章主要介紹了python微信聊天機(jī)器人改進(jìn)版,定時(shí)或觸發(fā)抓取天氣預(yù)報(bào)、勵(lì)志語(yǔ)錄等,向好友推送 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04利用Python實(shí)現(xiàn)Windows定時(shí)關(guān)機(jī)功能
是最初的幾個(gè)爬蟲(chóng),讓我認(rèn)識(shí)了Python這個(gè)新朋友,雖然才剛認(rèn)識(shí)了幾天,但感覺(jué)有種莫名的默契感。下面通過(guò)這篇文章給大家介紹Python實(shí)現(xiàn)Windows定時(shí)關(guān)機(jī)功能,需要的朋友可以參考下2017-03-03