pandas is in和not in的使用说明
简介
pandas按条件筛选数据时,除了使用query()方法,还可以使用isin和对isin取反进行条件筛选.
代码
importpandasaspd 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) abc 0TrueTrueFalse 1TrueTrueFalse 2TrueFalseFalse 3FalseFalseFalse 4FalseFalseFalse 5FalseFalseFalse
使用总结
pandas使用isin时,返回DataFrame中存储的数据为是否满足筛选条件的boolean,可以通过boolean对DataFrame对数据进行筛选。
补充:pandas中isin()函数及其逆函数使用
我使用这个函数就是用来清洗数据,删选过滤掉DataFrame中一些行。
布尔索引
这里你需要知道DateFrame中布尔索引这个东西,可以用满足布尔条件的列值来过滤数据,如下
>>>df=pd.DataFrame(np.random.randn(4,4),columns=['A','B','C','D']) >>>df ABCD 0-0.0183302.093506-0.086293-2.150479 10.104931-0.271810-0.0545990.361612 20.5902160.2180490.1572130.643540 3-0.254449-0.593278-0.150455-0.244485 >>>df.A>0#布尔索引 0False 1True 2True 3False Name:A,dtype:bool #布尔索引应用 >>>df[df.A>0] ABCD 10.104931-0.271810-0.0545990.361612 20.5902160.2180490.1572130.643540 >>>
isin()
添加一列E
>>>df['E']=['a','a','c','b'] >>>df ABCDE 0-0.0183302.093506-0.086293-2.150479a 10.104931-0.271810-0.0545990.361612a 20.5902160.2180490.1572130.643540c 3-0.254449-0.593278-0.150455-0.244485b >>>df.E.isin(['a','c']) 0True 1True 2True 3False Name:E,dtype:bool >>>df.isin(['b','c'])#整个df也同样适用 ABCDE 0FalseFalseFalseFalseFalse 1FalseFalseFalseFalseFalse 2FalseFalseFalseFalseTrue 3FalseFalseFalseFalseTrue #应用 >>>df[df.E.isin(['a','c'])] ABCDE 0-0.0183302.093506-0.086293-2.150479a 10.104931-0.271810-0.0545990.361612a 20.5902160.2180490.1572130.643540c >>>
isin()接受一个列表,判断该列中元素是否在列表中。
同时对多个列过滤,可以如下使用
df[df[某列].isin(条件)&df[某列].isin(条件)] #应用 >>>df.D=[0,1,0,2] >>>df[df.E.isin(['a','d'])&df.D.isin([0,])] ABCDE 0-0.018332.093506-0.0862930a
也可以
不推荐,你试一下就知道
df.isin({ '某列':[条件], '某列':[条件], }) #应用 >>>df.D=[0,1,0,2] >>>df ABCDE 0-0.0183302.093506-0.0862930a 10.104931-0.271810-0.0545991a 20.5902160.2180490.1572130c 3-0.254449-0.593278-0.1504552b >>>df[df.isin({'D':[0,3],'E':['a','d']})] ABCDE 0NaNNaNNaN0.0a 1NaNNaNNaNNaNa 2NaNNaNNaN0.0NaN 3NaNNaNNaNNaNNaN #没错这不适合选出一行 >>>df.isin({'D':[0,3],'E':['a','d']}) ABCDE 0FalseFalseFalseTrueTrue 1FalseFalseFalseFalseTrue 2FalseFalseFalseTrueFalse 3FalseFalseFalseFalseFalse
isin()的逆函数
告诉你没有isnotin,它的反函数就是在前面加上~,其他用法同上。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。