#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. Я попробую. Если это окажется так просто, я уйду и буду плакать, прежде чем делать графики.