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.