【问题标题】:Check if a column contains words from another column in pandas dataframe检查一列是否包含熊猫数据框中另一列的单词
【发布时间】:2020-05-21 11:27:30
【问题描述】:

有没有一种方法可以快速检查一列(逗号分隔)中包含的值是否存在于另一列(句子)中。使用python保留存在的单词并删除pandas数据框中不存在的单词?

原始数据是这样的

|sentence      | word|
----------------------

Hello World    |world

Hi how are you |are, car

I am good      |good,bad,sad, am

结果应该是这样的。

|sentence      | word|
----------------------

Hello World    |world

Hi how are you |are

I am good      |good, am

应该考虑性能,因为这是一个巨大的数据集

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    由于大多数 pandas 的字符串操作都没有向量化,您可以像这样进行列表推导:

    df['word'] = [', '.join([w for w in ws if w in s]) 
                    for s, ws in zip(df.sentence.str.lower(), df.word.str.split(',\s*'))
                 ]
    

    输出:

             sentence      word
    0     Hello World     world
    1  Hi how are you       are
    2       I am good  good, am
    

    注意:这只是一个需要改进的想法,例如仅匹配单词(例如regex


    更新如上所述,这是一个只匹配整个单词的改进:

     import re
     df['word'] = [', '.join([w for w in ws 
                         if re.search(f'\\b{w}\\b', s)) ]
                    for s, ws in zip(df.sentence.str.lower(), df.word.str.split(',\s*'))
                 ]
    

    【讨论】:

    • 它有效,但我看到的唯一问题是它还保留了部分存在的单词。例如,如果 saturn 出现在 sentence 中,并且 trun 在 word 中,它保持 trun。句词 0 土星是行星转,是
    • 你能检查一次更新吗,它不起作用。我猜有些括号有问题。
    • @user10136853 已更新。将方括号移动到正确的位置。
    • 方括号稍作改动,效果非常好。谢谢,非常感谢您的回复。 df['word'] = [', '.join([w for w in ws if re.search(f'\\b{w}\\b', s)]) for s, ws in zip(df .sentence.str.lower(), df.word.str.split(',\s*')) ]
    • 你也可以看看我的这个问题吗[链接]stackoverflow.com/questions/61960860/…
    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2023-03-03
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多