Pandas DataFrame字符串类型字段中日期识别失败问题咨询
失败原因
- 正则规则存在书写错误:
- 你修改后适配逗号的正则漏写了匹配数字的转义符
\:第二个位置的d应为\d,年份位置漏写\d,即使要匹配逗号分隔的格式,正确写法也应该是r'\d{1,2}, \d{1,2}, \d{2,4}',且该规则本身也不符合你的真实数据场景 - 你对数据格式判断有误:之前返回的
[7, 23, 2019]是findall方法返回的多匹配结果列表结构,不是单元格原始字符串内真的用逗号分隔日期段。从你补充的CSV原始格式来看,日期的分隔符是正斜杠/,既不是反斜杠也不是逗号。
- 你修改后适配逗号的正则漏写了匹配数字的转义符
- 第一版代码的正则匹配的是反斜杠分隔的日期,和原始数据的正斜杠格式不匹配,因此返回空结果。
正确实现方案
你不需要手动写正则提取,pandas内置的日期转换方法可以直接识别这种月/日/年格式的日期:
# 遍历所有object类型列,尝试转换为日期格式 for col in df.select_dtypes(include=['object']).columns: # errors='coerce'表示无法转换为日期的字段会返回空值NaT,方便筛选真正的日期列 df[col] = pd.to_datetime(df[col], format='%m/%d/%Y', errors='coerce') # 不需要强制指定格式可去掉format参数,让pandas自动推断 # df[col] = pd.to_datetime(df[col], errors='coerce')
如果你一定要用正则提取日期字符串,可以使用下面的规则:
for col in df.select_dtypes(include=['object']).columns: print(df[col].str.findall(r'\d{1,2}/\d{1,2}/\d{2,4}'))
内容的提问来源于stack exchange,提问作者user16537374
相关产品推荐
相关产品推荐

