Перетворити стовпчик панди в DateTime


241

У мене є одне поле в пандах DataFrame, яке було імпортовано у вигляді рядкового формату. Це має бути змінною дати. Як я конвертую його у стовпчик дати та потім фільтрую на основі дати.

Приклад:

  • Ім'я DataFrame : raw_data
  • Назва стовпця: Mycol
  • Формат значення у стовпці: '05SEP2014: 00: 00: 00.000'

Відповіді:


430

Використовуйте to_datetimeфункцію, вказавши формат, який відповідає вашим даним.

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

70
Примітка: formatаргумент не потрібен. to_datetimeрозумний. Вперед і спробуйте, не намагаючись відповідати вашим даним.
samthebrand

6
Для того , щоб уникнути SettingWithCopyWarningвикористання символу @ Дарт-behfans stackoverflow.com/a/42773096/4487805
Álvaro Лоза

3
Що робити, якщо ви просто хочете час, а не побачення?
FaCoffee

5
Не страшно розумний. Навіть якщо частина стовпців однозначно знаходиться у форматі dayfirst = True, вона все одно буде за замовчуванням dayfirst = False для інших у тому ж стовпці. Отже, безпечніше використовувати чітку специфікацію формату або принаймні параметр першого дня.
CPBL

10
Якщо пропустити рядок формату, ця операція може бути повільною з великою кількістю записів. Ця відповідь обговорює, чому. Схоже, infer_datetime_format=Trueможна також збільшити швидкість розбору до ~ 5-10x (згідно з документами pandas), якщо ви не включите рядок формату.
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

1
Дякую! Це приємно, оскільки воно більше застосоване, але інша відповідь була більш прямою. Я важко вирішив, що мені подобається краще :)
Кріс,

2
Мені подобається ця відповідь краще, тому що вона створює об'єкт datetime на відміну від pandas.tslib.Timestamp об'єкта
wesanyer

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замість цього

Я б припустив, що це пов'язано з деяким ланцюжком індексації.


2
Зробив
pinegulf

9

Використовуйте функцію pandas 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.