如何在字符串列中应用正则表达式替换

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 可以回答这个问题,但它没有提供任何上下文来解释如何或为什么。考虑添加一两句话来解释你的答案。

以上是关于如何在字符串列中应用正则表达式替换的主要内容,如果未能解决你的问题,请参考以下文章

如何查找和替换字符串列中数字之间的空格?

在 SparkR 中应用带有正则表达式模式的 withColumn 函数:重新格式化 DataFrame 中的字符串列

pyspark用正则表达式替换正则表达式

如何在 Python 中应用正则表达式替换?

UE中如何使用正则替换行中部分字符串

正则表达式位置匹配攻略【转】