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”

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')

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

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)

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.


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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.