在Pandas df中,我有大约130万个字符串(代表用户向IT帮助台发送邮件时的需求)。我还有一系列29813个名称,我想从这些字符串中删除,这样我只剩下描述问题的单词。这里有一个数据的小例子-它可以工作,但需要太长时间。我正在寻找一种更有效的方法来实现这一结果:
输入:
List1 = ["George Lucas has a problem logging in",
"George Clooney is trying to download data into a spreadsheet",
"Bart Graham needs to logon to CRM urgently",
"Lucy Anne George needs to pull management reports"]
List2 = ["Access Team", "Microsoft Team", "Access Team", "Reporting Team"]
df = pd.DataFrame({"Team":List2, "Text":List1})
xwords = pd.Series(["George", "Lucas", "Clooney", "Lucy", "Anne", "Bart", "Graham"])
for word in range(len(xwords)):
df["Text"] = df["Text"].str.replace(xwords[word], "! ")
# Just using ! in the example so one can clearly see the result
输出:
Team Text
0 Access Team ! ! has a problem logging in
1 Microsoft Team ! ! is trying to download data into a spreadsheet
2 Access Team ! ! needs to logon to CRM urgently
3 Reporting Team ! ! ! needs to pull management reports
我已经努力寻找答案很长一段时间了:如果我因为缺乏经验而错过了某个地方,请温柔地告诉我!
非常感谢:)
我建议标记文本并为名称使用一组:
xwords = set(["George", "Lucas", ...])
df["Text"] = ' '.join(filter(lambda x: x not in xwords, df["Text"].str.split(' ')))
根据字符串的不同,标记化需要比仅仅在空格上分割更复杂。
也许有一种熊猫特有的方式来做到这一点,但我对此没有什么经验;)
熊猫。系列.str.替换可以采用已编译的正则表达式作为模式
import re
patt = re.compile(r'|'.join(xwords))
df["Text"] = df["Text"].str.replace(patt, "! ")
也许这能有所帮助?不过,我没有使用如此长的正则表达式的经验。
感谢Ciprian Tomoiagé将我指向在Python 3中加速数百万正则表达式替换的帖子。Eric Duminil提供的选项,请参阅“如果您想要最快的解决方案,请使用此方法(带有设置查找)”,在Pandas环境中使用序列而不是列表同样有效-下面重复此问题的示例代码,在我的大型数据集上,整个事情在2.54秒内完成!
输入:
import re
banned_words = set(word.strip().lower() for word in xwords)
def delete_banned_words(matchobj):
word = matchobj.group(0)
if word.lower() in banned_words:
return ""
else:
return word
sentences = df["Text"]
word_pattern = re.compile('\w+')
df["Text"] = [word_pattern.sub(delete_banned_words, sentence) for sentence in sentences]
print(df)
输出:
Team Text
Access Team has a problem logging in
Microsoft Team is trying to download data into a spreadsheet
Access Team needs to logon to CRM urgently
Reporting Team needs to pull management reports
我想替换字符串中的一些单词。我有可行的解决方案,但我认为这不是最好的。你能帮我做些更有效的事情吗 代码是avaiable在这里:https://codepen.io/yasAFE/pen/BYOVme
大家好,我不需要答案,但我想知道并找出我做错了什么。作为一名初学者,我的学习任务非常“简单”。我需要创建一个字符串,在这个字符串中,我需要用其他单词替换一些单词,而不需要使用for循环:(我也想打印它,但我不知道该把Console.WriteLine放在哪里。谷歌搜索1小时不起作用,或者问了一个同事。 /*练习:与stringBuilder一起使用*猫变成小猫*狗变成小狗*老鼠变成小鼠*单词必须替
问题内容: 我想用php代替完整的单词 示例:如果我有 我用 新文本应如下所示 新hello1您好,Helloz PHP返回 NEW hello1 hello,NEWz 谢谢。 问题答案: 您要使用正则表达式。该单词边界匹配。 如果包含UTF-8文本,则必须添加Unicode修饰符“ u”,以便不会将非拉丁字符误解为单词边界:
问题内容: 我有以下数据框 我想更换和使用,所以最终的数据帧 我尝试了以下操作,但没有成功: 问题答案: 解决方案与通过: 如果需要将列中的所有值设置为一些:
问题内容: 我正在使用一个喜欢: 我使用的是哪里。这行代码对我不起作用。我想知道自己在做什么错? 问题答案: 尽管看起来可能存在一些语法问题,但是代码看起来或多或少还可以。这是一个工作示例:
问题内容: 通过这个代码,我试图取代确切的词用。但是,如果运行此命令,它将仅在我希望打印时打印,这与包含它的单词不同。我怎样才能解决这个问题?谢谢 问题答案: 使用带有单词边界 的正则表达式: 边界符号的反斜杠必须转义,因此为双反斜杠。