【问题标题】:Find words in a column per row after list of specific words in Python在Python中的特定单词列表之后的每行中查找单词
【发布时间】:2021-12-14 09:31:49
【问题描述】:

我有一个 pandas 数据框,其中有一列称为保修。例如,它记录了解决不同问题的方法。它看起来像所附的图片。

目标是在下面列出的单词之后找到单词。

word_list=['replace', 'clean', 'remove']

我怎样才能得到这个预期的输出 添加到上面 df 并带有值的列 更换电池线 清洁油箱 去除钉子

【问题讨论】:

  • 欢迎来到 SO :) 请添加一个数据的玩具示例和基于它的预期输出。它应该是coden-p的形式。
  • 始终将代码、数据和完整的错误消息作为文本(不是屏幕截图,不是链接)放在有问题的地方(不在评论中)。它将更具可读性,更多人会看到它 - 因此更多人可以帮助您。
  • 你尝试了什么?你的代码在哪里?
  • 它可能需要使用 .apply() 和运行循环 for word in word_list 的函数并检查该单词是否在文本中的字符串中。或者您可以尝试使用regex"replace|clean|remove" 来搜索文本。 ("|".join(word_list))
  • 如果您将示例数据作为文本 - pd.DataFrame(..) 会更简单 - 因为我们可以简单地复制它并用于解决方案。

标签: python pandas nlp


【解决方案1】:

pandas 可以使用regex 来搜索字符串,你可以使用模式来搜索

(?:replace|clean|remove) (\w+)

你可以使用python来生成这个模式

words = "|".join(word_list)
pattern = f'(?:{words}) (\w+)'

print('pattern:', pattern)

后来

df['word'] = df['warranty'].str.lower().str.findall(pattern).str[0]

为了确保我将文本转换为 lower(),因为模式使用小写单词。


如果replace,clean,remove 总是作为第一个单词,那么您可以简单地split(" ") 文本并获取第二个元素:

df['word'] = df['warranty'].str.split(' ').str[1]

如果您需要更复杂的代码,可以使用.apply()

def function(text):
    # ... complex code ...
    return text.split(' ')[1]

df['word'] = df['warranty'].apply(function)

最少的工作代码

import pandas as pd

data = {
    'warranty': [
        'replace battery wire from car',
        'clean fuel tank',
        'remove nail from tire',
    ], 
}

word_list=['replace', 'clean', 'remove']

df = pd.DataFrame(data)

words = "|".join(word_list)
pattern = f'(?:{words}) (\w+)'
print('pattern:', pattern)

def function(text):
    # ... complex code ...
    return text.split(' ')[1]

df['method1'] = df['warranty'].str.lower().str.findall(pattern).str[0]
df['method2'] = df['warranty'].str.split(' ').str[1]
df['method3'] = df['warranty'].apply(function)

print(df)

结果:

pattern: (?:replace|clean|remove) (\w+)

                        warranty  method1  method2  method3
0  replace battery wire from car  battery  battery  battery
1                clean fuel tank     fuel     fuel     fuel
2          remove nail from tire     nail     nail     nail

【讨论】:

    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多