简介
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,它的反函数就是在前面加上 ~ ,其他用法同上。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/weixin_42764612/article/details/89600903