如何在字符串列中应用正则表达式替换
Posted
技术标签:
【中文标题】如何在字符串列中应用正则表达式替换【英文标题】:How do I apply a regex substitution in a string column 【发布时间】:2017-02-15 20:42:07 【问题描述】:我有一个数据框,其中有一列如下所示
Years in current job
< 1 year
10+ years
9 years
1 year
我想在 python 中使用正则表达式或任何其他技术来获得结果
Years in current job
1
10
9
1
我得到了类似的东西,但我想它可以使用正则表达式以更好的方式完成
frame["Years in current job"] = frame["Years in current job"].str.replace(" ","")
frame["Years in current job"] = frame["Years in current job"].str.replace("<","")
frame["Years in current job"] = frame["Years in current job"].str.replace("year","")
frame["Years in current job"] = frame["Years in current job"].str.replace("years","")
【问题讨论】:
欢迎来到 ***。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。 *** 不是编码或教程服务。 【参考方案1】:df['Years in current job'] = df['Years in current job'].str.replace('\D+', '').astype('int')
Regex \D+
搜索非数字(并替换为空字符串)
我在 SO 上找到了这个:https://***.com/a/22591024/1832058
【讨论】:
【参考方案2】:import re
def extract_nums(txt):
try:
return int(re.search('([0-9]+)', txt).group(1))
except:
return -1
df['Years in current job'] = df['Years in current job'].apply(extract_nums)
编辑 - 在下面为每个建议添加上下文
这可以通过字符串方法轻松完成,但我将放弃使用正则表达式的方法,因为这可能有助于更复杂的任务。
re.search 和括号将找到您正在查找的数字....组提取括号内的匹配项...如果没有匹配项,try/except 将处理出现的任何问题。然后将该函数传递给 pandas.Series apply() 方法。
正则表达式搜索:https://docs.python.org/2/library/re.html#regular-expression-objects
申请方法:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html
【讨论】:
虽然这段代码 sn-p 可以回答这个问题,但它没有提供任何上下文来解释如何或为什么。考虑添加一两句话来解释你的答案。以上是关于如何在字符串列中应用正则表达式替换的主要内容,如果未能解决你的问题,请参考以下文章