【问题标题】:Matching keywords (strings) with a Pandas Dataframe使用 Pandas 数据框匹配关键字(字符串)
【发布时间】:2020-04-23 15:16:05
【问题描述】:

我有一个要与某些关键字匹配的数据框(我想检测包含这些关键字的行) 我设法通过这种方式得到了这份工作。但我想知道是否有更好的方法来做到这一点,因为我可能有多达 10 或 20 个不同的关键字。

df1 = df[df['column1'].str.contains("keyword1") | df['column1'].str.contains('keyword2')]

(我是初学者,请尽量简单)

【问题讨论】:

    标签: python string pandas dataframe match


    【解决方案1】:

    对于逻辑,您可以通过将单词与| 连接来创建单个模式。将您的 10-20 个单词存储在一个列表中,然后 '|'.join(that_list)

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'col1': ['foo', 'bar', 'baz', 'foobar', 'boo']})
    words = ['foo', 'bar']
    
    df['foo_OR_bar'] = df['col1'].str.contains('|'.join(words))
    
    #     col1  foo_OR_bar
    #0     foo        True
    #1     bar        True
    #2     baz       False
    #3  foobar        True
    #4     boo       False
    
    #To slice by that Boolean Series
    df1 = df.loc[df['col1'].str.contains('|'.join(words))]
    

    如果您的加入逻辑是,那么我们可以使用np.logical_and.reduce 和列表推导来保持简洁。

    df['foo_AND_bar'] = np.logical_and.reduce([df.col1.str.contains(w) for w in words])
    
    #     col1  foo_OR_bar  foo_AND_bar
    #0     foo        True        False
    #1     bar        True        False
    #2     baz       False        False
    #3  foobar        True         True
    #4     boo       False        False
    

    【讨论】:

    • OP 提示:| 模式有效,因为str.contains 使用正则表达式,您可以在此处观察结果:regex101.com/r/ke4Yps/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2014-05-07
    • 1970-01-01
    • 2020-10-31
    • 2022-01-10
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多