Как применить функцию к кадру данных, чтобы изменить миллисекунды GPS от начала недели до UTC ⇐ Python

Программы на Python
Anonymous
Как применить функцию к кадру данных, чтобы изменить миллисекунды GPS от начала недели до UTC

Сообщение Anonymous »

У меня есть кадр данных, содержащий миллисекунды GPS от начала недели (времени). Я хотел бы преобразовать эти данные в метку времени UTC. У меня есть функция, но мне трудно применить ее к моему фрейму данных. Кадр данных выглядит следующим образом:

Код: Выделить всё

time,prn,msg,CNR
248400000,010,1C,44.375
248401000,010,1C,41.9375
248402000,010,1C,41.9375
248402000,010,1C,40.0625
248404000,010,1C,49.0
248405000,010,1C,45.54
Функция, которую я использую, находится здесь:

Код: Выделить всё

def gps_datetime(time_week, time_ms, leap_seconds=18):
gps_epoch = datetime(1980, 1, 6, tzinfo=pytz.utc)
return gps_epoch + timedelta(weeks=time_week,
milliseconds=time_ms,
seconds=-leap_seconds)
Итак, эта функция прекрасно работает изолированно. Я могу передать ему следующую информацию, и он даст мне правильный ответ, например:

Код: Выделить всё

print(gps_datetime(2328, 248400000))
2328 относится к номеру недели GPS, а 248400000 — к миллисекундам с начала недели.
Это дает следующий результат, который является правильным.

Код: Выделить всё

2024-08-20 20:59:42+00:00 
Однако я хочу применить это к столбцу в моем фрейме данных, чтобы создать новый столбец. Я использовал эту строку кода:

Код: Выделить всё

df['Datetime'] = df.apply((lambda x: gps_datetime(2328,df.time)))
Однако это выдает сообщение об ошибке

Код: Выделить всё

TypeError: unsupported type for timedelta milliseconds component: Series
Я думал, что это связано с неправильным типом данных, исходный столбец «время» был целым числом. Я предположил, что это должен быть тип данных timedelta, поэтому использовал эту строку кода, прежде чем пытаться его применить.

Код: Выделить всё

df.time = pd.to_timedelta(df.time, unit='ms')
Я получил то же сообщение об ошибке, что и раньше.
У кого-нибудь есть предложения?

Подробнее здесь: https://stackoverflow.com/questions/790 ... om-start-o

Вернуться в «Python»