Как преобразовать временную метку unix в ms в читаемую временную метку в массиве pandas?

#python #pandas #datetime #unix-timestamp

#python #pandas #дата и время #unix-временная метка

Вопрос:

У меня есть массив pandas со столбцом, который содержит временные метки unix, но я думаю, что это в миллисекундах, потому что каждый раз в 3 дополнительных 0 в конце. Например, первая точка данных — 1546300800000, когда она должна быть просто 1546300800. Мне нужно преобразовать этот столбец в читаемое время, поэтому прямо сейчас у меня есть:

 df = pd.read_csv('data.csv')
df['Time] = pd.to_datetime(df['Time'])
df.to_csv('data.csv', index=False)
  

Вместо того, чтобы указывать правильное время, оно указывает мне время в 1970 году. Например, 1546300800000 дает мне 1970-01-01 00:25:46.301100, когда это должно быть 2019-01-01 00:00:00. Это делается для каждой временной метки в столбце, которая составляет более 20 тыс. строк

Комментарии:

1. Не используйте миллисекунды с временными метками. Ложное чувство точности (теперь у нас есть 18 секунд, или «лучше» 18000 мс). Если вам нужна точность в миллисекунду, не используйте временные метки

2. @GiacomoCatenazzi: почему целочисленная временная метка не может представлять точность в миллисекунду?

3. @MrFuppes: это просто ложное чувство точности. Временные метки не являются вторыми с эпохи (и гораздо меньше миллисекунд от эпох). По моему опыту, это создает скрытые проблемы (или нужно реализовать Google «медленное время вблизи високосных секунд). Гораздо лучше определить собственную начальную точку и подсчет миллисекунд (как это используется с научной точки зрения, часто на основе времени GPS). Эпоха Unix предназначена для людей, GPS (или других временных меток) для реального времени.

4. @GiacomoCatenazzi: хорошо, это может немного сбить с толку новичков ^^ Кстати. если вы говорите о времени leap и времени GPS, разве это не должна быть точность вместо точности? Я имею в виду, даже если ваш тип данных может точно представлять определенное время (или timedelta), он может быть неточным (например, систематически неправильным).

5. @MrFuppes: это зависит от данных (например, торговля на фондовой бирже, это нормально). но временная дельта может быть неправильной, если интервал включает в себя високосную секунду, а во время високосной секунды 1000 временных меток должны иметь одинаковое значение (поэтому временная метка эпохи не будет представлять точно определенное время). Ошибки будут появляться в странных местах: «не уникальный индекс» (который для производительности не проверяется pandas по умолчанию) или просто странные статистические результаты (выбросы).

Ответ №1:

Данные;

 df=pd.DataFrame({'UNIX':['1349720105','1546300800']})
  

Преобразование

 df['UNIX']=pd.to_datetime(df['UNIX'], unit='s')