【问题标题】: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","")

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。 StackOverflow 不是编码或教程服务。

标签: python regex pandas


【解决方案1】:
df['Years in current job'] = df['Years in current job'].str.replace('\D+', '').astype('int')

Regex \D+ 搜索非数字(并替换为空字符串)


我在 SO 上找到了这个:https://stackoverflow.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 可以回答这个问题,但它没有提供任何上下文来解释如何或为什么。考虑添加一两句话来解释你的答案。
    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 2021-10-07
    • 2018-07-13
    • 2015-11-30
    • 2021-11-29
    相关资源
    最近更新 更多