Как преобразовать столбец во время с миллисекундами?

У меня есть следующий текстовый файл с 2 столбцами:

Date, Time
2013/1/4, 07:00:00.0
2013/1/4, 07:00:00.1
2013/1/4, 07:00:00.2
2013/1/4, 07:00:00.3
2013/1/4, 07:00:00.4
2013/1/4, 07:00:00.5
2013/1/4, 07:00:00.6
2013/1/4, 07:00:00.7
2013/1/4, 07:00:00.8
2013/1/4, 07:00:00.9
2013/1/4, 07:00:00.10
2013/1/4, 07:00:00.11
2013/1/4, 07:00:00.12
2013/1/4, 07:00:00.13
2013/1/4, 07:00:00.14
2013/1/4, 07:00:00.15
2013/1/4, 07:00:00.16

Мне нужно преобразовать объект в формат времени. Для используемой «даты» (и она работает, как ожидалось):

df['Date'] = pd.to_datetime(df['Date'])

В течение «времени», за которым я следил (все провалилось, и да, я пытался найти и прочитать документацию по пандам)

df['Time']= (pd.to_datetime(df['Time'].str.strip(), format='%H:%M:%S:%F'))
df['Time'] = datetime.time(df['Time'], '%H:%M:%S,%f')
df['Time'] = datetime.datetime.strptime("%H:%M:%S,%f").timestamp()

даже пробовал это:

df['DateTime'] = pd.to_datetime(df.pop('Date')) + pd.to_timedelta(df.pop('Time'))

Пожалуйста, посоветуйте, что я здесь сделал не так, чтобы завершить отсчет времени. Ваша помощь очень ценится!

Я заметил, что все ваши 3 попытки используют разные строки формата, что означает, что трудно сказать, является ли это техникой или строкой.

Ann L. 25.12.2018 22:12

Я также заметил, что вы, кажется, не пробовали использовать точку между %S и %F или %f.

Ann L. 25.12.2018 22:13

df ['Time'] = pd.to_datetime (df ['Time'], format = '% H:% M:% S.% f'). dt.time преобразует столбец в объект. это то, что вы искали? если вы хотите иметь свойство отметки времени, вы можете сделать что-то вроде pd.to_datetime (df ['Time'], format = '% H:% M:% S.% f'). apply (pd.Tim‌ eStamp)

Bala 25.12.2018 22:39

теперь это объект, который пытается преобразовать в float64. при попытке «pd.to_datetime (df ['Time'], format = '% H:% M:% S.% f'). apply (pd.Ti‌ meStamp)» я получаю сообщение об ошибке: KeyError: 'Time '

Giladbi 26.12.2018 08:44
KeyError: Time означает, что df не имеет ключа со значением «Время». Это не имеет ничего общего со строками формата.
Ann L. 30.12.2018 00:46

при использовании df.set_index ('Time', inplace = True) я получаю ту же ошибку. как я могу без ошибок установить время как индекс?

Giladbi 12.01.2019 20:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
115
1

Ответы 1

Вероятно, проще объединить столбцы в виде строк, превратить их в объекты даты / времени, а затем манипулировать ими дальше (при необходимости).

По вашим данным у меня работает следующее:

pd.to_datetime(df.Date + ' ' + df.Time)

(Обратите внимание, что df.Date + ' ' + df.Time создает серию строк в формате, который понимает pandas, в вашем случае.)

Чтобы получить час, например:

df['foo'] = pd.to_datetime(df.Date + ' ' + df.Time)
df.foo.dt.hour

Рад видеть тебя снова!

cs95 26.12.2018 05:45

Я получаю сообщение об ошибке: «TypeError: тип данных« datetime »не распознан». любая идея? как мне получить полный рабочий день (включая миллисекунды), а не только часы? df.foo.dt.milliseconds?

Giladbi 26.12.2018 08:41

@Giladbi Какая строка выдает ошибку: та, что в моем ответе, или что-то после? Погуглите ошибку, похоже, это то, что может решить обновление pandas и numpy. Про «полный рабочий день (включая миллисекунды)» - полный рабочий день в день, полный рабочий день с эпохи или что-то еще?

Ami Tavory 26.12.2018 10:01

Если у вас есть секунда, пожалуйста, подумайте о том, чтобы взвесить мой пост здесь: stackoverflow.com/questions/53927460/… спасибо :)

cs95 26.12.2018 16:25

@AmiTavory эта строка: «df ['foo'] = pd.to_datetime (df.Date + '' + df.Time)» и ошибка: TypeError: тип данных «datetime» не распознан. Я также обновил pandas и numpy до последних

Giladbi 26.12.2018 17:33

Другие вопросы по теме