python isin notin_Python3 pandas(18) 筛选数据(续) (isnotin) 翻转运算 ~
在本专栏第三篇关于筛选的文章中,总结了isin()。在工作中我们其实经常要用到isin的反面,isnotin。在pandas中有isnotin么???没有。。没有。。。没有。。。。那怎么实现筛选除了某list以外的那些行呢?这里有几种方法参考一下。这是这两天翻看之前写的代码,这么长一段只为了实现isnotin。记得当时也是搜索网络,根据别人的经验写的,现在看来很繁琐。先是定义一个参考列表,Data
在本专栏第三篇关于筛选的文章中,总结了isin()。
在工作中我们其实经常要用到isin的反面,isnotin。
在pandas中有isnotin么???
没有。。
没有。。。
没有。。。。
那怎么实现筛选除了某list以外的那些行呢?
这里有几种方法参考一下。
这是这两天翻看之前写的代码,这么长一段只为了实现isnotin。
记得当时也是搜索网络,根据别人的经验写的,现在看来很繁琐。
先是定义一个参考列表,DataFrame里的一列通过tolist()转换为列表,然后将这两个列表都转换成集合set,然后用difference的方法做差集,再将差集转换回列表,然后再用isin进行筛选。
从最好理解的来:
方法一:pandas没有isnotin,我们自己定义一个。
a.定义函数:
b.运用函数:
方法二:使用列表的not in方法 + 简单函数
这种方法类似于第一种,不过更简洁。
方法三:使用merge
a.先将不想要的筛选出来成一个DataFrame
b.将两个DataFrame使用merge合并
c. 通过isnull筛选空值,筛选出我们想要的。
完整的代码就是一行:df[df.merge(df[df['门店'].isin(list1)], how='outer', on='门店')['人员数量_y'].isnull()]
方法四:~
这是一个偏方。一个神奇飘。
df[~df['门店'].isin(list1)]
就完了???
就是这么短。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这个神奇的飘飘~,其实是一种运算符,跟加减运算类似。
~ 是做翻转运算。将二进制里的0变成1,把1变成0,而1就是True,0就是False。
我们看看df[~df['门店'].isin(list1)] 的内层 df['门店'].isin(list1)的实质:
df['门店'].isin(list1)的实质是一串(series)True和False,那在前面加~,变成什么了?
在前面加~之后,所有的元素都发生了翻转,True变成了False,False变成了True。
方法五:
df[df['门店'].isin(list1)==False]
原理跟方法四类似,不过更容易理解。
推荐使用这种方法。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)