簡(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ù)為是否滿足篩選條件的boolean,可以通過boolean對(duì)DataFrame對(duì)數(shù)據(jù)進(jìn)行篩選。
補(bǔ)充:pandas中isin()函數(shù)及其逆函數(shù)使用
我使用這個(gè)函數(shù)就是用來清洗數(shù)據(jù),刪選過濾掉DataFrame中一些行。
布爾索引
這里你需要知道DateFrame中布爾索引這個(gè)東西,可以用滿足布爾條件的列值來過濾數(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è)列過濾,可以如下使用
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
#沒錯(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ù)
告訴你沒有isnotin,它的反函數(shù)就是在前面加上 ~ ,其他用法同上。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Pandas探索之高性能函數(shù)eval和query解析
- pandas數(shù)據(jù)分組groupby()和統(tǒng)計(jì)函數(shù)agg()的使用
- 使用pandas讀取表格數(shù)據(jù)并進(jìn)行單行數(shù)據(jù)拼接的詳細(xì)教程
- pandas 查詢函數(shù)query的用法說明