我正在尝试把一个凌乱的带有日期的笔记本转换成一个分类的熊猫日期系列。
0 03/25/93 Total time of visit (in minutes):\n
1 6/18/85 Primary Care Doctor:\n
2 sshe plans to move as of 7/8/71 In-Home Servic...
3 7 on 9/27/75 Audit C Score Current:\n
4 2/6/96 sleep studyPain Treatment Pain Level (N...
5 .Per 7/06/79 Movement D/O note:\n
6 4, 5/18/78 Patient's thoughts about current su...
7 10/24/89 CPT Code: 90801 - Psychiatric Diagnos...
8 3/7/86 SOS-10 Total Score:\n
9 (4/10/71)Score-1Audit C Score Current:\n
10 (5/11/85) Crt-1.96, BUN-26; AST/ALT-16/22; WBC...
11 4/09/75 SOS-10 Total Score:\n
12 8/01/98 Communication with referring physician...
13 1/26/72 Communication with referring physician...
14 5/24/1990 CPT Code: 90792: With medical servic...
15 1/25/2011 CPT Code: 90792: With medical servic...我有多种日期格式,如04/20/2009;04/20/09;4/20/09;4/3/09。我想把所有这些都转换成mm/dd/yyyy,变成一个新的列。
到目前为止我已经做了
df2['date']= df2['text'].str.extractall(r'(\d{1,2}[/-]\d{1,2}[/-]\d{2,})')另外,我也不知道如何提取所有只有mm/yy或yyyy格式日期的行,而不干扰上面的代码。请记住,在没有日期或月份的情况下,我会将1月1日和1月视为默认值。
发布于 2017-09-04 21:48:05
可以在正则表达式中使用pd.Series.str.extract,然后应用pd.to_datetime
pd.to_datetime(df['Text'].str.extract(
r'(?P<Date>\d+(?:\/\d+){2})', expand=False), errors='coerce')
0 1993-03-25
1 1985-06-18
2 1971-07-08
3 1975-09-27
4 1996-02-06
5 1979-07-06
6 1978-05-18
7 1989-10-24
8 1986-03-07
9 1971-04-10
10 1985-05-11
11 1975-04-09
12 1998-08-01
13 1972-01-26
14 1990-05-24
15 2011-01-25
Name: Date, dtype: datetime64[ns]str.extract返回如下所示的一系列字符串:
array(['03/25/93', '6/18/85', '7/8/71', '9/27/75', '2/6/96', '7/06/79',
'5/18/78', '10/24/89', '3/7/86', '4/10/71', '5/11/85', '4/09/75',
'8/01/98', '1/26/72', '5/24/1990', '1/25/2011'], dtype=object)Regex详细信息
(?P<Date>\d+(?:\/\d+){2})(?P<Date>....)命名捕获组\d+ 1或更多位数(?:\/\d+){2} -非捕获组重复两次,其中\/ -转义正斜杠{2} -中继器(两次)失踪天数的Regex
要处理可选的days,需要稍微修改一下正则表达式:
(?P<Date>(?:\d+\/)?\d+/\d+)详细信息
(?P<Date>....)命名捕获组(?:\d+\/)? -嵌套组(非捕获),其中\d+\/是可选的。\d+ 1或更多位数\/转义正斜杠其余的都一样。用这个正则表达式代替当前的正则表达式。pd.to_datetime将处理失踪的日子。
https://stackoverflow.com/questions/46044368
复制相似问题