2014-11-05 15 views
60

Mam jedno pole w DataFrame pand, które zostało zaimportowane jako format ciągu. Powinna to być zmienna typu datetime. Jak przekonwertować go na kolumnę datetime, a następnie filtrować na podstawie daty.Konwertuj kolumnę Pandy na DataTime

Przykład:

  • DataFrame Nazwa: raw_data
  • Kolumna Nazwa: Mycol
  • Wartość Format w kolumnie: '05SEP2014: 00: 00: 00,000'

Odpowiedz

134

Użyj to_datetime f unction, podając format, aby dopasować swoje dane.

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

Uwaga: argument 'format' nie jest wymagany. 'to_datetime' jest inteligentne. Śmiało i wypróbuj go bez prób dopasowania swoich danych. – samthebrand

+0

Aby uniknąć 'SettingWithCopyWarning' użyj @ darth-behfans https://stackoverflow.com/a/42773096/4487805 –

+0

Co, jeśli chcesz tylko czas, a nie datę? – FaCoffee

23

Można użyć metody DataFrame .apply() działać na wartościach w 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 
+0

Dzięki! Jest to miłe, ponieważ ma szersze zastosowanie, ale druga odpowiedź była bardziej bezpośrednia. Trudno mi było zdecydować, które mi się podobało :) – Chris

+0

Ta odpowiedź jest dla mnie lepsza, ponieważ tworzy obiekt datetime w przeciwieństwie do obiektu pandas.tslib.Timestamp – wesanyer

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

prace, jednak skutkuje ostrzeżeniem Pythona z Wartość stara się być ustawione na kopii wycinka z DataFrame. Spróbuj użyć .loc[row_indexer,col_indexer] = value zamiast:

Przypuszczam, że wynika to z indeksowania łańcuchów.

Powiązane problemy