如何在Pandas DataFrame中匹配预定义日期模式并提取日期生成新列
解决方法
将多个预定义的日期正则用|(或逻辑)拼接为复合正则,调用pandas字符串方法str.findall()提取所有匹配结果,再将结果列表拼接为逗号分隔的字符串存入新列即可。
import pandas as pd format_list = ["[0-9]{1,2}(?:\,|\.|\/|\-)(?:\s)?[0-9]{1,2}(?:\,|\.|\/|\-)(?:\s)?[0-9]{2,4}", "[0-9]{1,2}(?:\.)(?:\s)?(?:(?:(?:j|J)a)|(?:(?:f|F)e)|(?:(?:m|M)a)|(?:(?:a|A)p)|(?:(?:m|M)a)|(?:(?:j|J)u)|(?:(?:a|A)u)|(?:(?:s|S)e)|(?:(?:o|O)c)|(?:(?:n|N)o)|(?:(?:d|D)e))\w*(?:\s)?[0-9]{2,4}", "(?:(?:(?:j|J)an)|(?:(?:f|F)eb)|(?:(?:m|M)ar)|(?:(?:a|A)pr)|(?:(?:m|M)ay)|(?:(?:j|J)un)|(?:(?:j|J)ul)|(?:(?:a|A)ug)|(?:(?:s|S)ep)|(?:(?:o|O)ct)|(?:(?:n|N)ov)|(?:(?:d|D)ec))\w*(?:\s)?(?:\n)?[0-9]{1,2}(?:\s)?(?:\,|\.|\/|\-)?(?:\s)?[0-9]{2,4}(?:\,|\.|\/|\-)?(?:\s)?[0-9]{2,4}", "[0-9]{1,2}(?:\.)?(?:\s)?(?:\n)?(?:(?:(?:j|J)a)|(?:(?:f|F)e)|(?:(?:m|M)a)|(?:(?:a|A)p)|(?:(?:m|M)a)|(?:(?:j|J)u)|(?:(?:a|A)u)|(?:(?:s|S)e)|(?:(?:o|O)c)|(?:(?:n|N)o)|(?:(?:d|D)e))\w*(?:\,|\.|\/|\-)?(?:\s)?[0-9]{2,4}"] # 初始数据 data = {'Name':['Today is 09 September 2021', '25 December 2021 is christmas', '01/01/2022 is newyear and will be holiday on 02.01.2022 also']} df = pd.DataFrame(data) # 核心处理逻辑 # 合并所有正则模式为一个复合正则 date_pattern = '|'.join(format_list) # 提取所有匹配的日期,拼接为逗号分隔的字符串 df['Date'] = df['Name'].str.findall(date_pattern).str.join(', ') # 输出结果 print(df)
运行上述代码即可得到你需要的输出结果。
内容的提问来源于stack exchange,提问作者Aniiya0978
相关产品推荐
相关产品推荐

