从DataFrame字符串列提取时间字段返回NA,求解决方案
问题分析
你之前的正则表达式(\d+)只能匹配连续数字,但目标时间格式12/30/2022 23:20包含斜杠、空格、冒号等非数字字符,导致无法匹配到有效内容,所以返回NA。
解决方案
调整正则表达式,匹配包含数字、斜杠、冒号、空格的完整时间字符串,同时用\s+适配字段后的多个空格:
方法一:灵活匹配时间字符
import pandas as pd # 构造测试数据 TEST = pd.DataFrame({ 'ID': [1], 'RESULT': ['Pivot (Triage) Form Entered On: 12/30/2022 23:20 EST Performed On: 12/30/2022 23:16 EST '] }) # 提取时间字段 TEST['END_TIME'] = TEST['RESULT'].str.extract(r"Entered On:\s+([\d/: ]+) EST") TEST['START_TIME'] = TEST['RESULT'].str.extract(r"Performed On:\s+([\d/: ]+) EST") # 去除时间字符串两端冗余空格(可选) TEST['END_TIME'] = TEST['END_TIME'].str.strip() TEST['START_TIME'] = TEST['START_TIME'].str.strip() # 保留目标列 TEST = TEST[['ID', 'END_TIME', 'START_TIME']] print(TEST)
方法二:精准匹配时间格式
如果需要严格匹配MM/DD/YYYY HH:MM格式,可用更精确的正则:
TEST['END_TIME'] = TEST['RESULT'].str.extract(r"Entered On:\s+(\d{2}/\d{2}/\d{4} \d{2}:\d{2}) EST") TEST['START_TIME'] = TEST['RESULT'].str.extract(r"Performed On:\s+(\d{2}/\d{2}/\d{4} \d{2}:\d{2}) EST")
关键正则说明
\s+:匹配一个或多个空格,避免因原字符串空格数不一致导致匹配失败[\d/: ]+:匹配数字、斜杠、冒号、空格组成的时间字符串\d{2}/\d{2}/\d{4} \d{2}:\d{2}:精准匹配两位数字/两位数字/四位数字 两位数字:两位数字的时间格式
内容的提问来源于stack exchange,提问作者Raven
相关产品推荐
相关产品推荐

