如何在字符串列

时间:2016-10-06 23:39:04

标签: python regex pandas

我有一个数据框,其中包含如下所示的列

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","")

2 个答案:

答案 0 :(得分:1)

df['Years in current job'] = df['Years in current job'].str.replace('\D+', '').astype('int')

正则表达式\D+搜索非数字(并用空字符串替换)

我在SO上发现了这个:https://stackoverflow.com/a/22591024/1832058

答案 1 :(得分:0)

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和括号将找到你正在寻找的数字.... group在括号内提取匹配...并且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