【问题标题】:python pandas.Series.isin with case insensitivepython pandas.Series.isin 不区分大小写
【发布时间】:2018-01-22 15:09:30
【问题描述】:

我想用 DataFrame 的列之一过滤掉一些数据在列表中的行。

df[df['column'].isin(mylist)]

但我发现它区分大小写。 有没有不区分大小写的使用“.isin()”的方法?

【问题讨论】:

    标签: python pandas series


    【解决方案1】:

    一种方法是将系列的小写或大写与列表的大小写进行比较

    df[df['column'].str.lower().isin([x.lower() for x in mylist])]
    

    这里的好处是我们不会保存对原始 df 或列表的任何更改,从而使操作更高效

    考虑一下这个虚拟df:

        Color   Val
    0   Green   1
    1   Green   1
    2   Red     2
    3   Red     2
    4   Blue    3
    5   Blue    3
    

    对于列表 l:

    l = ['green', 'BLUE']
    

    你可以使用 isin()

    df[df['Color'].str.lower().isin([x.lower() for x in l])]
    

    你得到

        Color   Val
    0   Green   1
    1   Green   1
    4   Blue    3
    5   Blue    3
    

    【讨论】:

    • 或者,.isin(map(str.lower, mylist))
    • @JohnGalt,是的。只是列表理解比 map() 更快,并且 df 的大小是否很大。
    • 非常简洁的答案! +1
    • @MaxU,谢谢:)
    • 感谢您的回答。我的问题很好解决了:)
    【解决方案2】:

    我更喜欢用通用的.apply

    myset = set([s.lower() for s in mylist])
    df[df['column'].apply(lambda v: v.lower() in myset)]
    

    set 中查找比在list 中查找要快

    【讨论】:

      【解决方案3】:

      使用str 方法将其转换为str 并获取小写版本

      In [23]: df =pd.DataFrame([['A', 'B', 'C'], ['D', 'E', 6]], columns=['A', 'B', '
          ...: C'])
      
      In [24]: df
      Out[24]: 
         A  B  C
      0  A  B  C
      1  D  E  6
      
      In [25]: df.A
      Out[25]: 
      0    A
      1    D
      Name: A, dtype: object
      
      In [26]: df.A.str.lower().isin(['a', 'b', 'c'])
      Out[26]: 
      0     True
      1    False
      Name: A, dtype: bool
      

      【讨论】:

        【解决方案4】:

        我会将我的列表放入 CSV 并将其加载为数据框。之后我会运行命令:

        df_done = df[df["Server Name"].str.lower().isin(df_compare["Computer Name"].str.lower())]
        

        这样可以避免使用for循环,可以轻松处理大量数据。

        df = 5000 rows
        df_compare = 1000 rows
        

        【讨论】:

          猜你喜欢
          • 2012-12-01
          • 2013-03-06
          • 2020-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-03
          • 2016-11-24
          相关资源
          最近更新 更多