我有一个数据框,其中包含如下所示的列
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","")
答案 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