#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')