Pandas中object转datetime遇特定格式值为空问题求助
解决DataFrame多格式日期转换为datetime的问题
问题出在第二种日期格式2023-03-04-15.22.31.000000的分隔符不符合标准datetime格式,默认的pd.to_datetime无法自动识别,而你指定的format='%Y-%m-%d %H:%M:%S'也和该格式不匹配,因此转换后返回NaT(datetime类型的空值)。
以下是两种可行的解决方案:
方案一:统一格式后转换
先通过字符串替换将特殊格式转为标准datetime格式,再统一执行转换:
import pandas as pd # 将"YYYY-MM-DD-HH.MM.SS.ffffff"格式转为标准的"YYYY-MM-DD HH:MM:SS.ffffff" df['date'] = df['date'].str.replace( r'^(\d{4}-\d{2}-\d{2})-(\d{2})\.(\d{2})\.(\d{2})\.(\d+)$', r'\1 \2:\3:\4.\5', regex=True ) # 此时两种格式都能被pd.to_datetime识别 df['date'] = pd.to_datetime(df['date'], errors='coerce')
如果不需要保留微秒部分,可简化替换规则:
df['date'] = df['date'].str.replace( r'^(\d{4}-\d{2}-\d{2})-(\d{2})\.(\d{2})\.(\d{2})\.\d+$', r'\1 \2:\3:\4', regex=True ) df['date'] = pd.to_datetime(df['date'], errors='coerce')
方案二:分格式单独处理
通过掩码区分两种日期格式,分别指定对应格式转换,效率更高:
import pandas as pd # 标记出第二种格式的行 mask = df['date'].str.match(r'^\d{4}-\d{2}-\d{2}-\d{2}\.\d{2}\.\d{2}\.\d+$') # 直接用对应格式匹配第二种日期 df.loc[mask, 'date'] = pd.to_datetime( df.loc[mask, 'date'], format='%Y-%m-%d-%H.%M.%S.%f', errors='coerce' ) # 第一种格式让pd.to_datetime自动识别 df.loc[~mask, 'date'] = pd.to_datetime(df.loc[~mask, 'date'], errors='coerce')
说明
- 方案二中的
%f是匹配微秒的格式符,若不需要微秒,可将format改为%Y-%m-%d-%H.%M.%S,同时去掉原字符串末尾的.000000部分(或直接忽略,转换时会自动截断)
内容的提问来源于stack exchange,提问作者asmaa mahmoud
相关产品推荐
相关产品推荐

