首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据中日期的提取与解析

熊猫数据中日期的提取与解析
EN

Stack Overflow用户
提问于 2017-09-04 21:43:53
回答 1查看 1.1K关注 0票数 1

我正在尝试把一个凌乱的带有日期的笔记本转换成一个分类的熊猫日期系列。

代码语言:javascript
复制
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,变成一个新的列。

到目前为止我已经做了

代码语言:javascript
复制
df2['date']= df2['text'].str.extractall(r'(\d{1,2}[/-]\d{1,2}[/-]\d{2,})')

另外,我也不知道如何提取所有只有mm/yy或yyyy格式日期的行,而不干扰上面的代码。请记住,在没有日期或月份的情况下,我会将1月1日和1月视为默认值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-04 21:48:05

可以在正则表达式中使用pd.Series.str.extract,然后应用pd.to_datetime

代码语言:javascript
复制
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返回如下所示的一系列字符串:

代码语言:javascript
复制
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详细信息

代码语言:javascript
复制
(?P<Date>\d+(?:\/\d+){2})
  • (?P<Date>....)命名捕获组
  • \d+ 1或更多位数
  • (?:\/\d+){2} -非捕获组重复两次,其中
    • \/ -转义正斜杠
    • {2} -中继器(两次)

失踪天数的Regex

要处理可选的days,需要稍微修改一下正则表达式:

代码语言:javascript
复制
(?P<Date>(?:\d+\/)?\d+/\d+)

详细信息

  • (?P<Date>....)命名捕获组
  • (?:\d+\/)? -嵌套组(非捕获),其中\d+\/是可选的。
  • \d+ 1或更多位数
  • \/转义正斜杠

其余的都一样。用这个正则表达式代替当前的正则表达式。pd.to_datetime将处理失踪的日子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46044368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档