Panda Sütununu DateTime'a Dönüştür


242

Dize biçimi olarak alınan bir panda DataFrame bir alan var. Bu bir datetime değişkeni olmalıdır. Nasıl bir datetime sütununa dönüştürmek ve sonra tarihe göre filtre.

Misal:

  • Veri Çerçevesi Adı: raw_data
  • Sütun Adı: Mycol
  • Sütunda Değer Biçimi: '05SEP2014: 00: 00: 00.000'

Yanıtlar:


431

Verilerinize uygun to_datetimebir biçim belirterek işlevi kullanın .

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

71
Not: formatbağımsız değişken gerekli değildir. to_datetimeakıllı. Devam edin ve verilerinizi eşleştirmeye çalışmadan deneyin.
samthebrand

6
SettingWithCopyWarning@ Darth-behfans stackoverflow.com/a/42773096/4487805
Álvaro Loza

3
Tarih istemiyorsanız, sadece zaman istiyorsanız?
FaCoffee

5
Çok akıllı değil. Sütunun bir kısmı dayfirst = True biçiminde açık olsa bile, yine de aynı sütundaki diğerleri için dayfirst = False olarak varsayılan olarak kalır. Bu nedenle, açık bir biçim belirtimi veya en azından dayfirst parametresini kullanmak daha güvenlidir.
CPBL

10
Biçim dizesinin atlanması bu işlemin çok sayıda kayıtla yavaşlamasına neden olabilir. Bu cevap nedenini tartışıyor. infer_datetime_format=TrueBir biçim dizesi eklemezseniz, ayrıştırma hızını ~ 5-10x'e (panda dokümanlarına göre) kadar artırabilecek gibi görünüyor .
18

52

Mycol'daki .apply()değerler üzerinde çalışmak için DataFrame yöntemini kullanabilirsiniz :

>>> 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
Teşekkürler! Bu daha hoş, çünkü daha geniş çapta uygulanabilir ancak diğer cevap daha doğrudan. Hangisini daha çok sevdiğime karar vermekte zorlandım :)
Chris

2
Bu cevabı daha çok seviyorum, çünkü pandas.tslib.Timestamp nesnesinin aksine bir datetime nesnesi üretiyor
wesanyer

25

Dönüştürülecek birden fazla sütununuz varsa aşağıdakileri yapabilirsiniz:

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

çalışır, ancak bir DataFrame bir dilim kopyası üzerinde ayarlanmış bir A değeri Python uyarısı ile sonuçlanır. .loc[row_indexer,col_indexer] = valueBunun yerine kullanmayı deneyin

Bu bazı zincirleme indeksleme nedeniyle olduğunu tahmin ediyorum.


2
Bana birkaç deneme yaptı, ancak bu işe yarıyor: raw_data.loc [:, 'Mycol'] = pd.to_datetime (raw_data ['Mycol'], biçim = '% d% b% Y:% H:% M:% S .% f ')
pinegulf

9

to_datetimeSütunu DateTime olarak ayrıştırmak için panda işlevini kullanın . Ayrıca, kullanarak infer_datetime_format=True, biçimi otomatik olarak algılar ve belirtilen sütunu DateTime'a dönüştürür.

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.