当前位置 博文首页 > pandas is in和not in的使用说明

    pandas is in和not in的使用说明

    作者:yyyyyyyyyyang 时间:2021-07-17 18:50

    简介

    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,它的反函数就是在前面加上 ~ ,其他用法同上。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持站长博客。如有错误或未考虑完全的地方,望不吝赐教。

    jsjbwy
    下一篇:没有了