道布有三部分,如下所示:
11/012/1992上述例子的预期道布产出如下:
11/12/1992因此,基本上,代码应该以这样的方式消除这些值:
如果“/”的第一部分包含两个以上的数字,则必须删除第一个数字;如果“/”之前的第二个部分包含两个以上的数字,则必须删除第二个数字;如果“/”之前的第三个部分包含超过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我没有得到想要的输出。有人能帮我吗?谢谢。
发布于 2022-10-21 07:32:40
您可以使用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'\1\2\3')
# 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'\1\2\3'))
.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/1992https://stackoverflow.com/questions/74150018
复制相似问题