You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame中GPS周内毫秒值转换为UTC时间?

GPS周毫秒值转UTC时间戳问题解决

错误根源

你写的apply代码里犯了个小错误:lambda里用df.time传入的是整个time列的Series,而timedelta的milliseconds参数只接受单个数值,这就导致了类型错误。

快速修复:正确使用apply

把lambda里的df.time改成x.time,同时加上axis=1指定按行处理:

df['Datetime'] = df.apply(lambda x: gps_datetime(2328, x.time), axis=1)

这样每次调用gps_datetime时,传入的是当前行的单个time值,就能正常生成时间戳了。

更优方案:向量化操作(推荐)

apply本质是逐行循环,数据量大的时候效率很低。用pandas的向量化操作能大幅提升速度,修改函数支持处理Series:

import pandas as pd
from datetime import datetime, timedelta
import pytz

def gps_datetime_vec(time_week, time_ms_series, leap_seconds=18):
    gps_epoch = datetime(1980, 1, 6, tzinfo=pytz.utc)
    # 计算总秒数:GPS周转换为秒 + 毫秒转秒 - 闰秒
    total_seconds = time_week * 7 * 24 * 3600 + (time_ms_series / 1000) - leap_seconds
    return gps_epoch + pd.to_timedelta(total_seconds, unit='s')

然后直接传入整个time列:

df['Datetime'] = gps_datetime_vec(2328, df['time'])

验证结果

用你提供的示例数据,两种方法都能得到正确结果:第一行的248400000会转换为2024-08-20 20:59:42+00:00,和你单独调用函数的输出一致。


内容的提问来源于stack exchange,提问作者cappo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:51:08