Konversi Kolom Pandas ke DateTime

242

Saya memiliki satu bidang dalam panda DataFrame yang diimpor sebagai format string. Itu harus menjadi variabel datetime. Bagaimana cara mengonversinya ke kolom datetime dan kemudian memfilter berdasarkan tanggal.

Contoh:

  • Nama DataFrame : raw_data
  • Nama Kolom: Mycol
  • Format Nilai dalam Kolom: '05SEP2014: 00: 00: 00.000'
Chris
sumber

Jawaban:

431

Gunakan to_datetimefungsi ini, tentukan format untuk mencocokkan data Anda.

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')
chrisb
sumber
71
Catatan: formatargumen tidak diperlukan. to_datetimeitu pintar. Silakan dan coba tanpa mencoba mencocokkan data Anda.
samthebrand
6
Untuk menghindari SettingWithCopyWarningpenggunaan, @ darth-behfans stackoverflow.com/a/42773096/4487805
Álvaro Loza
3
Bagaimana jika Anda hanya ingin waktu dan bukan kencan?
FaCoffee
5
Tidak terlalu pintar. Bahkan jika beberapa kolom jelas di dayfirst = True format, itu masih akan default ke dayfirst = Salah untuk yang lain di kolom yang sama. Jadi, lebih aman untuk menggunakan spesifikasi format eksplisit atau setidaknya parameter dayfirst.
CPBL
10
Menghilangkan string format dapat menyebabkan operasi ini menjadi lambat dengan banyak catatan. Jawaban ini membahas mengapa. Sepertinya infer_datetime_format=Truejuga dapat meningkatkan kecepatan parsing hingga ~ 5-10x (menurut panda docs) jika Anda tidak menyertakan format string.
atwalsh
52

Anda bisa menggunakan metode DataFrame .apply()untuk beroperasi pada nilai-nilai di 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
mechanical_meat
sumber
1
Terima kasih! Ini bagus karena lebih luas diterapkan tetapi jawaban lainnya lebih langsung. Saya kesulitan menentukan mana yang paling saya sukai :)
Chris
2
Saya suka jawaban ini lebih baik, karena menghasilkan objek datetime sebagai lawan dari objek
pandas.tslib.Timestamp
25

Jika Anda memiliki lebih dari satu kolom yang akan dikonversi, Anda dapat melakukan hal berikut:

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

berfungsi, namun itu menghasilkan peringatan Python nilai A yang mencoba untuk ditetapkan pada salinan irisan dari DataFrame. Coba gunakan .loc[row_indexer,col_indexer] = valuesebagai gantinya

Saya kira ini karena beberapa pengindeksan rantai.

Darth BEHFANS
sumber
2
Butuh beberapa kali percobaan, namun ini berhasil: raw_data.loc [:, 'Mycol'] = pd.to_datetime (raw_data ['Mycol'], format = '% d% b% Y:% H:% M:% S: .% f ')
pinegulf
9

Gunakan to_datetimefungsi panda untuk mem-parsing kolom sebagai DateTime. Selain itu, dengan menggunakan infer_datetime_format=True, itu akan secara otomatis mendeteksi format dan mengkonversi kolom yang disebutkan ke DateTime.

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
Prateek Sharma
sumber