这是数据框的子集:
Index duration
1 4 months20mg 1X D
2 1 years10 1X D
3 2 weeks10 mg
4 8 years300 MG 1X D
5 20 days
6 10 months
输出应该是这样的:
Index duration
1 4 month
2 1 year
3 2 week
4 8 year
5 20 day
6 10 month
这是我的代码:
df.dosage_duration.replace(r'year[0-9a-zA-z]*' , 'year', regex=True)
df.dosage_duration.replace(r'day[0-9a-zA-z]*' , 'day', regex=True)
df.dosage_duration.replace(r'month[0-9a-zA-z]*' , 'month', regex=True)
df.dosage_duration.replace(r'week[0-9a-zA-z]*' , 'week', regex=True)
但它不起作用。有什么建议吗?
答案 0 :(得分:2)
有两个问题。
首先,你的正则表达式并不匹配你想要匹配的所有部分。查看months20mg 1X D
- 您要替换的部分中有一个空格。我想你可以使用'year.*'
作为匹配。
第二个是您在不存储结果的情况下调用replace
。如果您想按照自己的方式进行呼叫,则应指定inplace=True
。
如果使用稍微扩展的正则表达式,也可以使用单个调用。我们可以使用\1
来引用正则表达式的第一个匹配组。这些组用括号表示:
df.dosage_duration.replace(r'(year|month|week|day).*' , r'\1',
regex=True, inplace=True)