【发布时间】:2020-10-16 02:41:54
【问题描述】:
我目前正在尝试对熊猫数据框 df 进行简单的正则表达式替换,下面是我的正则表达式
df['data] = [re.sub(r'(\s?[a-zA-Z0-9]{5,10})+(;|:)+(\s?[a-zA-Z0-9]{5,10})','combo', str(x))
但是,我希望仅当某行包含“电子邮件”一词超过 2 次时才进行此替换。在 python 中是否有任何有效的方法来执行此操作。
Input:
Row 1 : testdata1:testdata1 testdata2:testdata2
Row 2 : testdata1:testdata1 testdata2:testdata2 email
Row 3 : email testdata1:testdata1 email testdata2:testdata2 email
预期输出:
Row 1 : testdata1:testdata1 testdata2:testdata2
Row 2 : testdata1:testdata1 testdata2:testdata2 email
Row 3 : email combo email combo email
【问题讨论】:
-
这里的替换逻辑是什么?
-
最佳方法可能是执行
"row".count("email")并检查是否有两个以上的实例。如果是这样,请使用正则表达式[a-zA-Z0-9]{5,10}[;:][a-zA-Z0-9]{5,10}运行re.sub -
我对python很陌生,如果下面的方法有误,我很抱歉。如果 df.data.str.count("Email") > 2: df['data'] = [re.sub(r'(https?:\/\/)?\w+( \.\w+)+(\/\w+)*(\/\w+\.\w+)?(\?[\w%&=.]*)*(?=[^\w.?&%= ])','combo', str(x)) for x in df['data']] else: pass ' 我得到一个错误“一个系列的真值是不明确的。使用 a.empty, a. bool()、a.item()、a.any() 或 a.all()。"
标签: python regex pandas dataframe