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'

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

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

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)

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.


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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.