DOB包含三个部分,例如如下所示:
11/012/1992
上述示例所需的DOB输出应如下所示:
11/12/1992
因此,基本上,代码应该以这样的方式消除这些值:
- 如果直到'/'的第一部分包含两个以上的数字,则必须删除第一个数字
- 如果"/"之前的第二部分包含2个以上的数字,则必须删除第一个数字
- 如果"/"之前的第三部分包含4位以上的数字,则必须删除第一位
我写的代码如下:
def dob_postprocessing(in_str):
if len(in_str) > 10:
if in_str[2] != '/':
in_str[0].replace(in_str[0], '', 1)
if in_str[5] != '/':
in_str[3].replace(in_str[3], '', 1)
if len(in_str[6:]) > 4:
in_str[6].replace(in_str[6], '', 1)
else:
return in_str
我没有得到想要的输出。有人能帮我吗?非常感谢。
您可以使用str.replace
来移除不需要的部件:
# option 1, just remove the extra digits
df['DOB2'] = df['DOB'].str.replace(r'^.*?(d{1,2}/).*?(d{1,2}/).*?(d{4})$', r'123')
# option 2, also pad the missing digits
df['DOB3'] = (pd.to_datetime(df['DOB'].str.replace(r'^.*?(d{1,2}/).*?(d{1,2}/).*?(d{4})$', r'123'))
.dt.strftime('%m/%d/%Y')
)
输出:
DOB DOB2 DOB3
0 11/012/1992 11/12/1992 11/12/1992
1 011/012/01992 11/12/1992 11/12/1992
2 11/2/1992 11/2/1992 11/02/1992