Преобразование времени Unix в python

#python #pandas #matplotlib #unix-timestamp #categorical-data

#python #pandas #matplotlib #unix-временная метка #категориальный-данные

Вопрос:

У меня есть набор машинных данных, который мне нужно проанализировать, но при разборе файла Excel с ПК линейного контроллера информация о дате (которая начинается в формате «10/09/2020») заканчивается тем, что, как я полагаю, является меткой времени unix, которая длиннее, чем я когда-либо видел или могу найти примердля SO (например, 1599696000000000000).

Попытки, которые я предпринял, чтобы скрыть это, не увенчались успехом. Я делаю программу python coursera, и лектор сказал, что это сложное предложение, поскольку нет стандартного способа, и ни один из тех, которые я пробовал, не сработал

В любом случае, файл Excel выглядит следующим образом

 Datum                WKZ_code    Time        Rad_t1   Not Important   Cut_Event
1599696000000000000  W03          00:00:00    100           250           /
1599696000000000000  W03          00:00:01    100           250           /
1599696000000000000  W03          00:00:02    100           250           /
1599696000000000000  W03          00:00:03    100           250           /
1599696000000000000  W03          00:00:04    100           250           /
1599696000000000000  W03          00:00:00    100           250           Speed Cut
 

Мне нужно иметь возможность вернуть столбец данных обратно в формат «ДД / ММ / ГГГГ», иначе мои графики вырезанных данных завершатся неудачей, поскольку python, похоже, не может определить, куда их поместить по оси y.

То, что я попробовал, оказалось самым аккуратным решением

 pd.Timestamp.combine(pd.Timestamp.utcfromtimestamp(df['DATUM'][0]/1E9), pd.to_datetime(df['Time'][0]))
 

но это привело к ошибке

 TypeError                                 Traceback (most recent call last)
<ipython-input-102-b9d1b1186db5> in <module>
----> 1 pd.Timestamp.combine(pd.Timestamp.utcfromtimestamp(df['DATUM'][0]/1E9), pd.to_datetime(df['Time'][0]))

pandas_libstslibstimestamps.pyx in pandas._libs.tslibs.timestamps.Timestamp.combine()

TypeError: combine() argument 2 must be datetime.time, not Timestamp
 

Разработчик python из другого отдела предложил:

 df = pd.read_excel("tool W03 with cuts and dates.xlsx",
                   dtype=object)
df = df[['DATUM']]
df = df['DATUM']=(pd.to_datetime(df['DATUM'],unit='s')) 
df.head()
 

Который также выдал ошибку вокруг устройства, но я не смог найти лекарство

 pandas_libstslib.pyx in pandas._libs.tslib.array_with_unit_to_datetime()

OutOfBoundsDatetime: cannot convert input 1599696000000000000 with the unit 's
 

Если кто-нибудь может предложить решение, я был бы очень, очень благодарен. Я изо всех сил старался придерживаться соглашений, задавая этот вопрос, заранее принося извинения за ошибки.

Ответ №1:

Используйте to_datetime значение по умолчанию unit='ns' и преобразуйте время в timedeltas с помощью to_timedelta :

 df['Datum'] = pd.to_datetime(df['Datum'])   pd.to_timedelta(df['Time'])
print (df)
                Datum WKZ_code      Time  Rad_t1  Not Important  Cut_Event
0 2020-09-10 00:00:00      W03  00:00:00     100            250          /
1 2020-09-10 00:00:01      W03  00:00:01     100            250          /
2 2020-09-10 00:00:02      W03  00:00:02     100            250          /
3 2020-09-10 00:00:03      W03  00:00:03     100            250          /
4 2020-09-10 00:00:04      W03  00:00:04     100            250          /
5 2020-09-10 00:00:00      W03  00:00:00     100            250  Speed Cut
 

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

1. Я попробую. Если это окажется так просто, я уйду и буду плакать, прежде чем делать графики.