Pandas转换DateTime格式时日月颠倒导致Elapsedtime计算异常
解决日期解析颠倒导致的累计时间错误问题
问题核心是pd.to_datetime的默认解析逻辑会把你数据里的日/月/年格式误判为月/日/年(美式日期规则),比如将01/04/2023解析成2023年1月4日而非实际的4月1日,最终导致时间差计算出现跨月跳变。
直接指定明确的日期格式是最可靠的修复方案,修改后的代码如下:
# 强制按日/月/年 时分秒的格式解析日期 df['Date_Time'] = pd.to_datetime(df['Date_Time'], format='%d/%m/%Y %H:%M:%S') df['deltatime'] = (df['Date_Time'] - df['Date_Time'].shift(1)).dt.total_seconds() df['deltatime'].iloc[0] = 0 # 将首个值填充为0而非NaN df['Elapsedtime'] = df['deltatime'].cumsum()
额外说明:
- 使用
format='%d/%m/%Y %H:%M:%S'可以彻底避免格式混淆,让解析器严格遵循你数据的日期格式规则。 - 把
astype('timedelta64[s]')替换为dt.total_seconds()是pandas中提取时间差秒数的更规范写法,结果一致且可读性更强。 infer_datetime_format=True无效的原因是:当日期中的日和月数值都≤12时,解析器无法自动判断格式优先级,会默认采用美式格式解析,因此必须显式指定格式。
内容的提问来源于stack exchange,提问作者serdar_bay
相关产品推荐
相关产品推荐

