使用pandas

时间:2017-06-28 03:46:16

标签: python pandas

这是数据框的子集:

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)

但它不起作用。有什么建议吗?

1 个答案:

答案 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)