带有额外逻辑的熊猫str.extract(lambda?)

糟糕的用户

我在文字中有很多类型的日期:

  • 2009年4月20日;
  • 09年4月20日;
  • 09/4/20;
  • 09/4/3
  • 2009年4月20日;

还有很多。

我正在研究一个RegEx(或几个RegEx)来提取日期。

幸运大熊猫具有一个非常有用的功能,称为提取,例如,这可以很好地提取我的大多数约会:

df['text'].str.extract(r'(\d{1,2})[\/-](\d{1,2})[\/-](\d{1,4})', expand=True)

如您在上面看到的,我有3个捕获组。这将创建3列:月,日,年。

是否可以通过某种方式在它们上运行lambda并创建一个单列?

与在“替换”上使用lambda的方法相同

df['text'].str.replace(r'(\w+day\b)', lambda x: x.groups()[0][:3])
格伦

您可以通过调整正则表达式以使用一个捕获组来避免出现单独的列的问题。这样的事情适用于您提供的日期格式:

df.date.str.extract(r'([0-9]{1,2}[\/\.\-][0-9]{1,2}[\/\.\-][0-9]{1,4})', expand=False)

您可以将结果进一步转换为日期时间:

df['my_date_col'] = pd.to_datetime(df['my_date_col'])

为了证明pd.to_datetime宽大:

import pandas as pd

lst = ['04/03/2009', '04/03/09', '4/03/09', '4/3/09', '04-03-2009',
       '4-3-09', '3 Apr 2009', '3rd April 2009', '3-Apr-09', '3-Apr-2009',
       '04/3/09', '04-3-09', '04-3-2009', '4-03-2009']

set(map(pd.to_datetime, lst))

# {Timestamp('2009-04-03 00:00:00')}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章