我需要在数据帧中找到Twitter用户名,并出于道德原因将用户名转换为“usrusr”令牌。我试过这段代码:
def finduser(string):
regex = "(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9-_]+)"
username = (regex,string)
return["usrusr" for x in username]
def finduserinrow(row):
return finduser(row['text'])
annotated['new column'] = annotated.apply(finduserinrow, axis=1)
annotated.head()但它会将new column中的所有单元格转换为[usrusr, usrusr]。但我希望推文文本留在那里,只有在推文中的用户名需要转换为usrusr令牌。我如何解决这个问题?有什么想法,有什么帮助吗?
非常感谢。
发布于 2021-01-21 21:15:42
您可以使用
import re
#...
def finduser(string):
return re.sub(r"(?<![a-zA-Z0-9_.-])@[A-Za-z]+[A-Za-z0-9_-]+", "usrusr", string)请参阅regex demo。
您可以使用的Pandas代码似乎是
annotated['new column'] = annotated['text'].str.replace(r'(?<![a-zA-Z0-9_.-])@[A-Za-z]+[A-Za-z0-9_-]+', 'usrusr')正则表达式详细信息
(?<![a-zA-Z0-9_.-]) -紧靠当前位置左侧的位置不能有-@、char[A-Za-z]+、letters[A-Za-z0-9_-]+、_、.或@ - ASCII字符-一个或多个大写ASCII字符-一个或多个ASCII字母、数字、_和-字符。查看使用当前代码的Pandas测试:
>>> import pandas as pd
>>> df=pd.DataFrame({'text':['abc 12 @Sasha, @Vasya etc.', '@KnowWho...'],'text2':['abc 12 @Sasha, @Vasya etc.', '@KnowWho...']})
>>> df
text text2
0 abc 12 @Sasha, @Vasya etc. abc 12 @Sasha, @Vasya etc.
1 @KnowWho... @KnowWho...
>>> import re
>>> def finduserinrow(row):
return finduser(row['text'])
>>> def finduser(string):
return re.sub(r"(?<![a-zA-Z0-9_.-])@([A-Za-z]+[A-Za-z0-9_-]+)", "usrusr", string)
>>> df.apply(finduserinrow, axis=1)
0 abc 12 usrusr, usrusr etc.
1 usrusr...
dtype: objecthttps://stackoverflow.com/questions/65827920
复制相似问题