【发布时间】:2020-10-28 02:52:42
【问题描述】:
我有这个数据集;
text num
test one 3.5 and 60 test tow 3.5/60
test one 3/4 test tow 3/4
test one 5.0 test 10 tow 5.0
如果数字匹配,我需要从文本列中删除数字 所以我这样做了:
df['text']=[re.sub('{}'.format(number), '', the_text) for the_text, number in zip(df['text'], df['num'])]
结果变成这样
text num
test one 3.5 and 60 test tow 3.5/60
test one test tow 3/4
test one test 10 tow 5.0
如您所见,除了第一行之外,匹配的数字已被删除,因为它不是完全匹配的。 所以我想使用包含函数匹配或任何类似于匹配部分文本的东西。
我希望第一行会变成
测试一个并测试两个
我已经这样做了,但出现错误:
[re.sub(r"\b{}\b".format(word), "", the_text) for the_text, word in zip(df['text'], word='/'.join([r'{}'.format(words) for words in df['num']]) )]
TypeError: zip() takes no keyword arguments
有什么帮助吗?
【问题讨论】:
-
如果您说您遇到了错误,请始终发布错误消息。
-
代替
'{}'.format(number),试试r'(?<!\d)(?<!\d\.)(?:{})(?!\.?\d)'.format('|'.join([re.escape(x) for x in number.split('/')])) -
@WiktorStribiżew 不起作用
-
@JoelFan 谢谢你
-
你的示例数据框是
df = pd.DataFrame({'text': ['test one 3.5 and 60 test tow','test one 3/4 test tow', 'test one 5.0 test tow'], 'num': ['3.5/60', '3/4', '5.0']})吗?