pandas转换GPS时间列报小时越界及timedelta转datetime64报错
问题原因
- 触发
ParserError: hour must be in 0..23: 27:33.5:你所用的pd.datetime默认按自然日的「时:分:秒」规则解析字符串,当时间值累计超过24小时、小时位数值大于23时,自然解析失败。这类GPS数据集导出的时间列本质是从记录起始点开始累计的时长值,不是带日期的标准日历时间。 - 触发
dtype timedelta64[ns] cannot be converted to datetime64[ns]:timedelta是时间差类型,只记录时长跨度,没有绑定具体的日期锚点,无法直接转换为需要明确时间点的datetime类型,自然也不能生成DatetimeIndex用于重采样。
解决步骤
直接按以下代码处理即可,不需要额外依赖:
import pandas as pd # 第一步:将时间字符串正确解析为时间差类型 # 如果你的原始时间格式是「累计时:分:秒.毫秒」(冒号前是小时位,如报错示例里的27代表累计27小时),用这行: df['time_delta'] = pd.to_timedelta(df['time']) # --- 如果你的原始时间格式是「累计分:秒.毫秒」(冒号前是分钟位,之前加00:的逻辑是对的),就注释掉上面那行,用下面这行: # df['time_delta'] = pd.to_timedelta('00:' + df['time']) # 第二步:给时间差绑定一个固定起始基准日期(可以替换为你数据集实际的记录开始日期,不影响重采样的时间间隔计算) df['time'] = pd.Timestamp('2024-01-01') + df['time_delta'] # 第三步:设置为DatetimeIndex,后续即可正常执行resample操作 df = df.set_index('time') # 重采样示例:按1分钟窗口聚合取均值 # df_resample = df.resample('1min').mean()
注意:基准日期的选择不会影响重采样的计算结果,因为重采样是基于时间点之间的相对间隔做窗口划分,只要所有时间值的基准统一即可。
内容的提问来源于stack exchange,提问作者Mahim khan
相关产品推荐
相关产品推荐

