查询pandas dataframe列中是否包含单词的文本短语

2024-10-03 21:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

目标:查询dataframe列中可能包含单词或不包含单词的文本短语。在高级阶段,短语是“word1 word2”。单词1和单词2之间可能有其他单词,也可能没有。你知道吗

这听起来像是个骗局,但我尝试了以下答案:

How to extract a substring from inside a string in Python?

Regular expression: matching and grouping a variable number of space separated words

Match text between two strings with regular expression

Extract text information between two define text

还有一些人,他们都忽略了单词1和单词2之间没有单词的情况。你知道吗

这些高投票率的解决方案都依赖于(+?)在word1和word2之间。你知道吗

例如:字1(+?)字2

如果word1和word2之间有1+个单词,则上述方法效果很好。但是,如果word1和word2之间没有单词,那么它不会返回任何结果,但是我希望它在这种特殊情况下也返回结果,因为文本短语包含word1和word2。你知道吗

由于不需要预先清除伪大写或其他字符,因此也不需要预先清除伪大写或其他字符。你知道吗

我的代码和试验如下。我用“pieces delivered”代替word1和word2作为文本短语。你知道吗

注意,它们都忽略了第一个示例,即“已交付的工件”之间没有中间词。它应该返回“一些工件按时交货”以及其他带有“工件…”的行。。。已交付”。你知道吗

提前谢谢。你知道吗

import pandas as pd
df = pd.Series(['a', 'b', 'c', 'some pieces delivered on time', 'all pieces not delivered', 'most pieces were never delivered at all', 'the pieces will never ever be delivered', 'some delivered', 'i received broken pieces'])

print("Baseline - Desired results SHOULD contain:\n", df.iloc[3:7])

# The following options all miss one or more rows from the desired results. 
# Just uncomment rgx = to run a regex. 
rgx = r'pieces\s(.*?)\sdelivered'
#rgx = r'pieces\s(\w*)\sdelivered'
#rgx = r'pieces\s(\w*)+\sdelivered'
#rgx = r'pieces\s(\w)*\sdelivered'
#rgx = r'pieces\s(\w+\s)+\sdelivered'
#rgx = r'pieces\s(.*)\sdelivered'
#rgx = r'pieces\s+((%s).*?)\sdelivered'

df2 = df[df.str.contains(rgx)]
print("\nActual results were:\n", df2)

Tags: totextfrom文本dfall单词results
1条回答
网友
1楼 · 发布于 2024-10-03 21:27:43

第二个'\s'位置错误。只有在两个词不相邻时才需要:

df[df.str.contains(r'pieces\s(?:.+?\s)?delivered')]
#3              some pieces delivered on time
#4                   all pieces not delivered
#5    most pieces were never delivered at all
#6    the pieces will never ever be delivered

相关问题 更多 >