Mengurai Tanggal dengan Benar
Urai string tanggal menjadi datetime64 dengan pd.to_datetime, tangani berbagai format, dan tetapkan DatetimeIndex.
Mengurai Tanggal dengan Benar adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Mengapa Penguraian Tanggal Penting
Data tanggal dan waktu ada di hampir semua himpunan data dunia nyata—stempel waktu transaksi, tanggal lahir, log peristiwa, dan periode keuangan. Saat tanggal disimpan sebagai string (dtype object), Anda tidak dapat menghitung durasi, melakukan pengambilan sampel ulang berdasarkan bulan, atau mengurutkan secara kronologis. Mengonversi string menjadi dtype datetime64 milik Pandas membuka seluruh API deret waktu dan memungkinkan analisis temporal.
import pandas as pd
df = pd.DataFrame({'date': ['2024-01-15', '2024-03-20', '2024-07-04']})
print(df['date'].dtype) # object
# You cannot do arithmetic on string dates
# df['date'] + pd.Timedelta('1 day') # TypeError!
# After parsing:
df['date'] = pd.to_datetime(df['date'])
print(df['date'].dtype) # datetime64[ns]
print(df['date'] + pd.Timedelta('1 day'))Dasar-dasar pd.to_datetime()
pd.to_datetime(series) adalah fungsi utama untuk mengonversi kolom string menjadi datetime64. Fungsi ini cukup cerdas untuk mengenali sebagian besar format tanggal umum secara otomatis (ISO 8601, tanggal US, dan tanggal Eropa) tanpa memerlukan string format. Hasilnya adalah Series dengan dtype datetime64[ns]—memiliki presisi nanodetik dan mampu menyimpan stempel waktu dari tahun 1677 hingga 2262.
import pandas as pd
dates = pd.Series([
'2024-01-15',
'15/01/2024',
'January 15, 2024',
'2024-01-15 08:30:00'
])
parsed = pd.to_datetime(dates)
print(parsed)
# 0 2024-01-15 00:00:00
# 1 2024-01-15 00:00:00
# 2 2024-01-15 00:00:00
# 3 2024-01-15 08:30:00
print(parsed.dtype) # datetime64[ns]Menentukan Argumen format=
Jika inferensi otomatis terlalu lambat atau ambigu (misalnya, '01-02-03' dapat berarti 2 Januari 2003, 1 Februari 2003, atau 3 Februari 2001), berikan string format yang tepat menggunakan kode strftime Python. Cara ini juga jauh lebih cepat—pada himpunan data besar, penguraian dengan format eksplisit dapat 10 kali lebih cepat daripada inferensi otomatis karena Pandas tidak perlu mencoba beberapa pola.
import pandas as pd
dates = pd.Series(['15/01/2024', '20/03/2024', '04/07/2024'])
# Explicit format: day/month/year
parsed = pd.to_datetime(dates, format='%d/%m/%Y')
print(parsed)
# 0 2024-01-15
# 1 2024-03-20
# 2 2024-07-04
# Common format codes:
# %Y = 4-digit year, %y = 2-digit year
# %m = month (01-12), %d = day (01-31)
# %H = hour (0-23), %M = minute, %S = seconderrors='coerce' untuk Tanggal yang Tidak Valid
Himpunan data nyata sering berisi kesalahan ketik atau string penanda seperti 'TBD', 'N/A', atau '99/99/9999' dalam kolom tanggal. Meneruskan errors='coerce' memberi tahu pd.to_datetime() untuk mengonversi nilai yang tidak dapat diurai menjadi NaT (Not a Time—padanan datetime untuk NaN), alih-alih memunculkan pengecualian. Dengan demikian, Anda dapat mengidentifikasi dan menangani tanggal yang tidak valid secara terpisah.
import pandas as pd
dates = pd.Series(['2024-01-15', 'TBD', '2024-07-04', 'N/A'])
parsed = pd.to_datetime(dates, errors='coerce')
print(parsed)
# 0 2024-01-15
# 1 NaT
# 2 2024-07-04
# 3 NaT
# Detect bad dates
print('Bad date rows:', parsed.isna().sum()) # 2parse_dates dalam read_csv()
Tempat paling efisien untuk mengurai tanggal adalah saat pemuatan data menggunakan parameter parse_dates dari pd.read_csv(). Teruskan daftar nama kolom (atau indeks) yang harus diurai sebagai tanggal. Cara ini menghindari langkah pascapemrosesan terpisah dan sering kali lebih cepat karena Pandas menanganinya selama penguraian CSV pada tingkat C.
import pandas as pd
import io
csv_data = '''order_id,order_date,ship_date
1,2024-01-15,2024-01-18
2,2024-02-20,2024-02-22
'''
df = pd.read_csv(
io.StringIO(csv_data),
parse_dates=['order_date', 'ship_date']
)
print(df.dtypes)
# order_id int64
# order_date datetime64[ns]
# ship_date datetime64[ns]Pengakses .dt untuk Komponen Tanggal
Setelah sebuah kolom memiliki dtype datetime64, pengakses .dt membuka puluhan properti dan metode. Anda dapat mengekstrak .dt.year, .dt.month, .dt.day, .dt.hour, .dt.dayofweek (0=Senin), dan .dt.is_month_end. Semua ini digunakan untuk rekayasa fitur dalam peramalan deret waktu dan untuk mengelompokkan data berdasarkan periode waktu.
import pandas as pd
df = pd.DataFrame({
'event_time': pd.to_datetime([
'2024-03-15 08:30:00',
'2024-07-04 14:00:00',
'2024-12-25 09:00:00'
])
})
df['year'] = df['event_time'].dt.year
df['month'] = df['event_time'].dt.month
df['day_of_week'] = df['event_time'].dt.day_name()
df['hour'] = df['event_time'].dt.hour
print(df[['year', 'month', 'day_of_week', 'hour']])Menetapkan DatetimeIndex
Untuk analisis deret waktu, kolom datetime biasanya ditetapkan sebagai indeks DataFrame. Dengan DatetimeIndex, Anda dapat menggunakan pemotongan berbasis waktu (df['2024'], df['2024-01':'2024-06']), melakukan pengambilan sampel ulang ke frekuensi apa pun, dan mengakses seluruh API deret waktu Pandas. Gunakan set_index() atau teruskan index_col dalam read_csv.
import pandas as pd
df = pd.DataFrame({
'date': pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03']),
'temp': [22.5, 23.0, 21.8]
})
df = df.set_index('date')
print(df)
# temp
# date
# 2024-01-01 22.5
# 2024-01-02 23.0
# 2024-01-03 21.8
# Time-based slicing
print(df['2024-01-02':'2024-01-03'])Menangani Berbagai Format Tanggal
Jika kolom tanggal berisi campuran format (misalnya, beberapa baris memiliki tanggal ISO dan baris lainnya memiliki tanggal bergaya US), Anda tidak dapat menentukan satu string format. Teruskan format='mixed' (Pandas 2.0+) agar deteksi format dilakukan per baris, atau bersihkan terlebih dahulu kolom tersebut dengan regex untuk menormalkan semua tanggal ke satu format sebelum memanggil pd.to_datetime().
import pandas as pd
mixed_dates = pd.Series([
'2024-01-15',
'03/20/2024',
'2024-07-04T10:30:00'
])
# format='mixed' handles different formats row-by-row (Pandas >= 2.0)
parsed = pd.to_datetime(mixed_dates, format='mixed')
print(parsed)
# 0 2024-01-15 00:00:00
# 1 2024-03-20 00:00:00
# 2 2024-07-04 10:30:00Datetime dengan Informasi Zona Waktu
Stempel waktu dunia nyata sering disertai informasi zona waktu. pd.to_datetime() dapat mengurai string offset UTC (misalnya, '2024-01-15 08:30:00+05:30') dan menyimpannya sebagai datetime64 yang memiliki informasi zona waktu. Gunakan .dt.tz_convert('UTC') untuk menormalkan semua stempel waktu ke zona waktu umum agar perbandingan dan aritmetika dilakukan dengan benar.
import pandas as pd
dates = pd.to_datetime(['2024-01-15 08:30:00+05:30', '2024-01-15 10:00:00-08:00'])
print(dates)
# DatetimeIndex(['2024-01-15 08:30:00+05:30', '2024-01-15 10:00:00-08:00'])
# Convert both to UTC for fair comparison
utc_dates = dates.tz_convert('UTC')
print(utc_dates)
# DatetimeIndex(['2024-01-15 03:00:00+00:00', '2024-01-15 18:00:00+00:00'])Menghitung Selisih Tanggal
Aritmetika antara dua kolom datetime64 menghasilkan Series Timedelta. Anda dapat mengekstrak jumlah hari, jam, atau detik dari Timedelta menggunakan properti .dt.days, .dt.seconds, dan .dt.total_seconds(). Ini adalah cara standar untuk menghitung usia, durasi, atau fitur jumlah hari sejak peristiwa terakhir.
import pandas as pd
df = pd.DataFrame({
'start': pd.to_datetime(['2024-01-01', '2024-03-10', '2024-06-15']),
'end': pd.to_datetime(['2024-01-20', '2024-04-05', '2024-06-30'])
})
df['duration_days'] = (df['end'] - df['start']).dt.days
print(df[['start', 'end', 'duration_days']])
# start end duration_days
# 0 2024-01-01 2024-01-20 19
# 1 2024-03-10 2024-04-05 26
# 2 2024-06-15 2024-06-30 15pd.date_range() untuk Menghasilkan Tanggal
pd.date_range(start, end, freq=) menghasilkan rangkaian tanggal dengan jarak yang sama sebagai DatetimeIndex. Ini berguna untuk membuat kerangka waktu lengkap yang dapat digunakan sebagai acuan untuk mengindeks ulang data—sehingga setiap periode kalender muncul dalam output meskipun tidak ada peristiwa pada hari tersebut. Nilai freq yang umum: 'D' (harian), 'ME' (akhir bulan), 'h' (per jam).
import pandas as pd
# Weekly dates for the first quarter of 2024
weekly = pd.date_range(start='2024-01-01', end='2024-03-31', freq='W')
print(weekly[:5])
# DatetimeIndex(['2024-01-07', '2024-01-14', '2024-01-21', '2024-01-28', '2024-02-04'])
# Monthly date spine
monthly = pd.date_range(start='2024-01', periods=12, freq='ME')
print(len(monthly), monthly[0], monthly[-1])
# 12 2024-01-31 2024-12-31Pemeriksaan Singkat
Uji pemahaman Anda tentang cara mengurai tanggal dengan benar di Pandas.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: pd.to_datetime() mengonversi kolom string menjadi datetime64, format= menentukan pola yang tepat untuk kecepatan dan akurasi, dan errors='coerce' mengubah tanggal yang tidak valid menjadi NaT tanpa menyebabkan program berhenti. Pengakses .dt mengekstrak tahun, bulan, hari, dan komponen lainnya, sedangkan penetapan DatetimeIndex memungkinkan pemotongan berbasis waktu. Berikutnya, kita akan mempelajari pengakses .str untuk operasi string tervectorisasi.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengurai Tanggal dengan Benar” gratis?
Ya — teks lengkap “Mengurai Tanggal dengan Benar” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengurai Tanggal dengan Benar”?
Urai string tanggal menjadi datetime64 dengan pd.to_datetime, tangani berbagai format, dan tetapkan DatetimeIndex. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Mengurai Tanggal dengan Benar” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Memeriksa Tipe Data Kolom
- Konversi Tipe dengan astype()
- Tipe Data Kategorikal
- Mengurai Tanggal dengan Benar