代码之家  ›  专栏  ›  技术社区  ›  KubiK888

如何使用contains()将列表与python pandas的初始子字符串进行比较?

  •  1
  • KubiK888  · 技术社区  · 6 年前

    我有一些列表值要对照另一个条件列表进行检查。

    例如,我要检查的条件列表是 ['042', '043', '044'] . 只要初始子字符串包含任何这些值,我就希望返回true。

    例如, ['04233'] , ['042'] ['042', '011'] 应该返回true。但为了 ['11042'] ['13044'] ,即使它包含作为子字符串的检查条件,因为它们不是初始字符,所以它们应该返回 False .

    我的代码如下:

    import pandas as pd
    
    df = pd.DataFrame(['152042']) #'04211'
    df.columns=['test_list']
    
    cond_list = ['042', '043', '044']
    
    print (df['test_list'].str.contains('|'.join(cond_list)).any())
    
    # Return True, but False is desired.
    

    我不知道如何合并子字符串检查,同时确保子字符串作为前导字符出现。

    2 回复  |  直到 6 年前
        1
  •  2
  •   user3483203    6 年前

    您已经有了一般的想法,只需在字符串的开头添加一个匹配的断言,使用 ^ 性格。

    rgx = '^({})'.format('|'.join(cond_list))
    # '^(042|043|044)'
    
    df['test_list'].str.contains(rgx).any()
    

    False
    
        2
  •  3
  •   BENY    6 年前

    使用 startswith 注意到了 tuple list

    df['test_list'].str.startswith(tuple(cond_list))
    Out[47]: 
    0    False
    Name: test_list, dtype: bool
    
    推荐文章