Saya memiliki kerangka data panda dengan kolom berikut;
Date Time
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Bagaimana cara menggabungkan data ['Date'] & data ['Time'] untuk mendapatkan yang berikut ini? Apakah ada cara untuk melakukannya dengan menggunakan pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Jawaban:
Perlu disebutkan bahwa Anda mungkin dapat membaca ini secara langsung, misalnya jika Anda menggunakan
read_csv
menggunakanparse_dates=[['Date', 'Time']]
.Dengan asumsi ini hanya string, Anda dapat menambahkannya bersama-sama (dengan spasi), memungkinkan Anda untuk menerapkan
to_datetime
:Catatan: yang mengejutkan (bagi saya), ini berfungsi dengan baik dengan NaN yang diubah menjadi NaT, tetapi perlu dikhawatirkan bahwa konversi tersebut (mungkin menggunakan
raise
argumen).sumber
parse_dates=[['Start date', 'Start time'], ['End date', 'End time']])
. Panda <3Jawaban yang diterima berfungsi untuk kolom yang merupakan tipe data
string
. Untuk kelengkapan: Saya menemukan pertanyaan ini ketika mencari bagaimana melakukan ini ketika kolomnya adalah tipe data: tanggal dan waktu.sumber
time
dtype, di panda. Saya memiliki lebih banyak atimedelta
(dan adatetime
) dalam hal ini Anda hanya perlu menambahkannya, lihat jawaban sayapd.datetime
sudah tidak digunakan lagi dan disarankan untuk mengimpordatetime
modul secara eksplisit saja.Anda dapat menggunakan ini untuk menggabungkan tanggal dan waktu ke dalam kolom dataframe yang sama.
Membaca file .csv dengan kolom gabungan Date_Time:
Anda juga dapat menggunakan baris ini untuk mempertahankan kedua kolom lainnya.
sumber
date_parser
, misalnyaparser = lambda date: pd.datetime.strptime(date, '%d-%b-%y %H:%M:%S')
Anda dapat mentransmisikan kolom jika tipenya berbeda (datetime dan timestamp atau str) dan menggunakan to_datetime:
Hasil:
Terbaik,
sumber
Saya tidak memiliki reputasi yang cukup untuk mengomentari jka.ne jadi:
Saya harus mengubah baris jka.ne agar berfungsi:
Ini mungkin membantu orang lain.
Juga, saya telah menguji pendekatan yang berbeda, menggunakan
replace
alih-alihcombine
:yang dalam kasus OP adalah:
Saya telah menghitung waktu kedua pendekatan untuk kumpulan data yang relatif besar (> 500.000 baris), dan keduanya memiliki waktu proses yang serupa, tetapi menggunakan
combine
lebih cepat (59 detik untukreplace
vs 50 detik untukcombine
).sumber
Jawabannya sangat tergantung pada jenis kolom Anda . Dalam kasus saya, saya pernah
datetime
dantimedelta
.Jika ini kasus Anda, Anda hanya perlu menambahkan kolom:
sumber
datetime
dantimedelta
. Jawaban utama entah bagaimana mengetahui bahwa kolomnya adalah string, atau mungkin hanya jawaban yang berhasil untuk pertanyaan yang diposting.Anda juga dapat mengonversi menjadi
datetime
tanpa penggabungan string, dengan menggabungkan objekdatetime
dantimedelta
. Dikombinasikan denganpd.DataFrame.pop
, Anda dapat menghapus rangkaian sumber secara bersamaan:sumber
Pertama, pastikan Anda memiliki tipe data yang benar:
Kemudian Anda dengan mudah menggabungkannya:
sumber
Gunakan
combine
fungsi:sumber
Dataset saya memiliki data resolusi 1 detik selama beberapa hari dan penguraian dengan metode yang disarankan di sini sangat lambat. Sebagai gantinya saya menggunakan:
Perhatikan penggunaan
cache=True
membuat parsing tanggal sangat efisien karena hanya ada beberapa tanggal unik di file saya, yang tidak berlaku untuk kolom tanggal dan waktu gabungan.sumber
DATA:
<TICKER>, <PER>, <DATE>, <TIME> , <OPEN>, <HIGH>, <LOW>, <CLOSE>, <VOL> SPFB.RTS, 1, 20190103,100100 , 106580.0000000,107260.0000000,106570.0000000 , 107230.0000000.3726
KODE:
sumber