pandas is in和not in的使用說明
簡介
pandas按條件篩選數據時,除瞭使用query()方法,還可以使用isin和對isin取反進行條件篩選.
代碼
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
使用總結
pandas使用isin時,返回DataFrame中存儲的數據為是否滿足篩選條件的boolean,可以通過boolean對DataFrame對數據進行篩選。
補充:pandas中isin()函數及其逆函數使用
我使用這個函數就是用來清洗數據,刪選過濾掉DataFrame中一些行。
佈爾索引
這裡你需要知道DateFrame中佈爾索引這個東西,可以用滿足佈爾條件的列值來過濾數據,如下
>>> 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 #佈爾索引應用 >>> 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'])#整個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 #應用 >>> 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()接受一個列表,判斷該列中元素是否在列表中。
同時對多個列過濾,可以如下使用
df[df[某列].isin(條件)&df[某列].isin(條件)] #應用 >>> 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({ '某列':[條件], '某列':[條件], }) #應用 >>> 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 #沒錯這不適合選出一行 >>> 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()的逆函數
告訴你沒有isnotin,它的反函數就是在前面加上 ~ ,其他用法同上。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Pandas reindex重置索引的使用
- Python Pandas工具繪制數據圖使用教程
- python數學建模之三大模型與十大常用算法詳情
- Pandas 篩選和刪除目標值所在的行的實現
- Pandas數據分析-pandas數據框的多層索引