从 pandas 列中提取任何格式的日期(日期是较长字符串的一部分)

Sup*_*ero 6 python pandas

我正在尝试从 pandas 列中提取任何格式的日期(日期是较长字符串的一部分)。

我找到了这个答案,它在 pandas 之外执行此操作,但我不确定如何使用它在 pandas 专栏中执行此操作。

日期可以采用多种格式,例如:

footballer, born October 1989
footballer, born 1900s
footballer, born 29 December 1987
Brazilian footballer, born 1983
31/02/1901
16 May 2019
Run Code Online (Sandbox Code Playgroud)

是否可以将任何日期格式和部分日期作为具有日期类型的 pandas 列?

Ste*_*tef 6

使用链接答案中的方法:

import dateutil.parser as dparser
s.apply(lambda x: dparser.parse(x,fuzzy=True).strftime('%Y-%m-%d'))
Run Code Online (Sandbox Code Playgroud)

虽然dparser当然不能应对所有可能性:在示例数据中,您必须更改footballer, born 1900sfootballer, born 1900's,否则解析会抱怨第二个必须在 0..59 中

如果需要异常处理,则必须定义常规函数,因为 lambda 无法处理 try/ except:

def myparser(x):
    try:
       return dparser.parse(x,fuzzy=True)
    except:
       return None

s.apply(lambda x: myparser(x))
Run Code Online (Sandbox Code Playgroud)

这将插入NaT错误日期的值(或者如果您愿意,您可以提供“默认日期”):

0    1989-10-12
1           NaT
2    1987-12-29
3    1983-07-12
4           NaT
5    2019-05-16
Run Code Online (Sandbox Code Playgroud)

  • @Superdooperhero您尝试将该函数应用于整个数据帧,将其应用于特定列:如果您有一个包含“Strings”列的数据帧,则使用它插入一个新列“birth_date”:“df['birth_date'] =df.Strings.apply(lambda x: dparser.parse(x,fuzzy=True))`。 (2认同)