Конвертировать Pandas Column в DateTime

243

У меня есть одно поле в DataFrame панд, который был импортирован в виде строки. Это должна быть переменная datetime. Как преобразовать его в столбец даты и времени, а затем отфильтровать по дате.

Пример:

  • Имя фрейма данных : raw_data
  • Название колонки: Mycol
  • Формат значения в столбце: «05SEP2014: 00: 00: 00.000»
Крис
источник

Ответы:

432

Используйте to_datetimeфункцию, указав формат, соответствующий вашим данным.

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')
chrisb
источник
71
Примечание: formatаргумент не требуется. to_datetimeумный Попробуйте и не пытайтесь сопоставить ваши данные.
samthebrand
6
Во избежание SettingWithCopyWarningиспользования @darth-behfans stackoverflow.com/a/42773096/4487805
Альваро Лоза
3
Что если вы просто хотите время, а не свидание?
FaCoffee,
5
Не очень умный. Даже если некоторые столбцы однозначно представлены в формате dayfirst = True, для остальных в этом же столбце по умолчанию будет использоваться значение dayfirst = False. Поэтому безопаснее использовать явную спецификацию формата или хотя бы параметр dayfirst.
CPBL
10
Пропуск строки формата может привести к замедлению этой операции с большим количеством записей. Этот ответ обсуждает почему. Похоже, infer_datetime_format=Trueможет также увеличить скорость анализа до ~ 5-10x (в соответствии с документацией панд), если вы не включите строку формата.
atwalsh
52

Вы можете использовать метод DataFrame .apply()для работы со значениями в Mycol:

>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol'])
>>> df
                    Mycol
0  05SEP2014:00:00:00.000
>>> import datetime as dt
>>> df['Mycol'] = df['Mycol'].apply(lambda x: 
                                    dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f'))
>>> df
       Mycol
0 2014-09-05
mechanical_meat
источник
1
Спасибо! Это хорошо, потому что это более широко применимо, но другой ответ был более прямым. Мне было трудно решить, что мне больше нравится :)
Chris
2
Мне больше нравится этот ответ, потому что он создает объект datetime, а не объект
pandas.tslib.Timestamp
25

Если у вас есть более одного столбца для преобразования, вы можете сделать следующее:

df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)
Влад Безден
источник
15
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

работает, однако это приводит к предупреждению Python о значении, которое пытается установить копия копии фрагмента из DataFrame. Попробуйте использовать .loc[row_indexer,col_indexer] = valueвместо

Я предполагаю, что это связано с некоторой цепочкой индексации.

Дарт Бефанс
источник
3
Потребовалось
Сосновый залив
9

Используйте to_datetimeфункцию панд, чтобы проанализировать столбец как DateTime. Кроме того, с помощью infer_datetime_format=Trueон автоматически определит формат и преобразует указанный столбец в DateTime.

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
Пратик Шарма
источник