pandas is in和not in的使用说明

时间:2022-11-26 13:16:48

简介

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 is in和not in的使用说明

使用总结

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