Konwertuj kolumnę Pandy na DateTime

241

Mam jedno pole w pandach DataFrame, które zostało zaimportowane jako format ciągu. Powinna to być zmienna datetime. Jak przekonwertować go na kolumnę daty i godziny, a następnie filtrować według daty.

Przykład:

  • DataFrame Name: raw_data
  • Nazwa kolumny: Mycol
  • Format wartości w kolumnie: „05SEP2014: 00: 00: 00.000”
Chris
źródło

Odpowiedzi:

430

Użyj to_datetimefunkcji, określając format pasujący do twoich danych.

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')
chrisb
źródło
70
Uwaga: formatargument nie jest wymagany. to_datetimejest bystry. Śmiało i spróbuj, nie próbując dopasować swoich danych.
samthebrand
6
Aby uniknąć SettingWithCopyWarningkorzystania z @ darth-behfans stackoverflow.com/a/42773096/4487805
Álvaro Loza
3
Co jeśli chcesz tylko godzinę, a nie datę?
FaCoffee
5
Niezbyt mądry. Nawet jeśli niektóre kolumny są jednoznacznie w formacie dayfirst = True, nadal domyślnie ustawi się na dayfirst = False dla pozostałych w tej samej kolumnie. Dlatego bezpieczniej jest użyć jawnej specyfikacji formatu lub przynajmniej parametru dayfirst.
CPBL
10
Pominięcie ciągu formatu może spowodować spowolnienie tej operacji przy dużej liczbie rekordów. Ta odpowiedź wyjaśnia, dlaczego. Wygląda na to, że infer_datetime_format=Truemoże także zwiększyć szybkość analizowania do ~ 5-10x (zgodnie z dokumentacją pandy), jeśli nie podasz ciągu formatu.
atwalsh
52

Możesz użyć metody DataFrame .apply()do działania na wartościach w Mycolu:

>>> 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
mięso_mechaniczne
źródło
1
Dzięki! To miłe, ponieważ ma szersze zastosowanie, ale druga odpowiedź była bardziej bezpośrednia. Trudno mi było zdecydować, który mi się bardziej podoba :)
Chris
2
Bardziej podoba mi się ta odpowiedź, ponieważ tworzy obiekt typu data
godzina
25

Jeśli chcesz przekonwertować więcej niż jedną kolumnę, możesz wykonać następujące czynności:

df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)
Vlad Bezden
źródło
15
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

działa, jednak powoduje ostrzeżenie w języku Python o wartości Próbuje być ustawiona na kopii wycinka z DataFrame. Spróbuj użyć .loc[row_indexer,col_indexer] = valuezamiast tego

Sądzę, że jest to spowodowane indeksowaniem łańcuchowym.

Darth BEHFANS
źródło
2
Podjąłem
pinegulf
9

Użyj to_datetimefunkcji pandy, aby parsować kolumnę jako DateTime. Ponadto przy użyciu infer_datetime_format=Trueautomatycznie wykrywa format i konwertuje wspomnianą kolumnę na DateTime.

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
Prateek Sharma
źródło