Saya pikir mungkin ada upaya yang lebih terkonsolidasi dalam jawaban untuk lebih menjelaskan hubungan antara modul datetime Python, datetime numpy64 / timedelta64 dan objek Timestamp / Timedelta panda.
Pustaka standar datetime dari Python
Pustaka standar datetime memiliki empat objek utama
- waktu - hanya waktu, diukur dalam jam, menit, detik dan mikrodetik
- tanggal - hanya tahun, bulan, dan hari
- datetime - Semua komponen waktu dan tanggal
- timedelta - Jumlah waktu dengan satuan hari maksimum
Buat empat objek ini
>>> import datetime
>>> datetime.time(hour=4, minute=3, second=10, microsecond=7199)
datetime.time(4, 3, 10, 7199)
>>> datetime.date(year=2017, month=10, day=24)
datetime.date(2017, 10, 24)
>>> datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 24, 4, 3, 10, 7199)
>>> datetime.timedelta(days=3, minutes = 55)
datetime.timedelta(3, 3300)
>>> # add timedelta to datetime
>>> datetime.timedelta(days=3, minutes = 55) + \
datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 27, 4, 58, 10, 7199)
Objek datetime64 dan timedelta64 NumPy
NumPy tidak memiliki objek tanggal dan waktu yang terpisah, hanya objek datetime64 tunggal untuk mewakili satu momen dalam waktu. Objek datetime modul datetime memiliki presisi mikrodetik (sepersejuta detik). Objek datetime64 NumPy memungkinkan Anda untuk mengatur presisi dari jam sampai ke attoseconds (10 ^ -18). Konstruktornya lebih fleksibel dan dapat mengambil berbagai input.
Bangun objek datetime64 dan timedelta64 NumPy
Berikan bilangan bulat dengan string untuk unit. Lihat semua unit di sini . Itu akan dikonversi ke banyak unit setelah zaman UNIX: 1 Januari 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Anda juga dapat menggunakan string selama masih dalam format ISO 8601.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Timedeltas memiliki satu unit
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Bisa juga membuatnya dengan mengurangi dua objek datetime64
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp dan Timedelta membangun lebih banyak fungsi di atas NumPy
Sebuah cap waktu panda adalah momen dalam waktu yang sangat mirip dengan datetime tetapi dengan lebih banyak fungsi. Anda dapat membangunnya dengan pd.Timestamp
atau pd.to_datetime
.
>>> pd.Timestamp(1239.1238934) #defautls to nanoseconds
Timestamp('1970-01-01 00:00:00.000001239')
>>> pd.Timestamp(1239.1238934, unit='D') # change units
Timestamp('1973-05-24 02:58:24.355200')
>>> pd.Timestamp('2017-10-24 05') # partial strings work
Timestamp('2017-10-24 05:00:00')
pd.to_datetime
berfungsi sangat mirip (dengan beberapa opsi lagi) dan dapat mengonversi daftar string menjadi Stempel Waktu.
>>> pd.to_datetime('2017-10-24 05')
Timestamp('2017-10-24 05:00:00')
>>> pd.to_datetime(['2017-1-1', '2017-1-2'])
DatetimeIndex(['2017-01-01', '2017-01-02'], dtype='datetime64[ns]', freq=None)
Mengubah datetime Python ke datetime64 dan Timestamp
>>> dt = datetime.datetime(year=2017, month=10, day=24, hour=4,
minute=3, second=10, microsecond=7199)
>>> np.datetime64(dt)
numpy.datetime64('2017-10-24T04:03:10.007199')
>>> pd.Timestamp(dt) # or pd.to_datetime(dt)
Timestamp('2017-10-24 04:03:10.007199')
Mengubah datetime numpy ke datetime dan Timestamp
>>> dt64 = np.datetime64('2017-10-24 05:34:20.123456')
>>> unix_epoch = np.datetime64(0, 's')
>>> one_second = np.timedelta64(1, 's')
>>> seconds_since_epoch = (dt64 - unix_epoch) / one_second
>>> seconds_since_epoch
1508823260.123456
>>> datetime.datetime.utcfromtimestamp(seconds_since_epoch)
>>> datetime.datetime(2017, 10, 24, 5, 34, 20, 123456)
Konversikan ke Stempel Waktu
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Konversi dari Timestamp ke datetime dan datetime64
Ini cukup mudah karena cap waktu panda sangat kuat
>>> ts = pd.Timestamp('2017-10-24 04:24:33.654321')
>>> ts.to_pydatetime() # Python's datetime
datetime.datetime(2017, 10, 24, 4, 24, 33, 654321)
>>> ts.to_datetime64()
numpy.datetime64('2017-10-24T04:24:33.654321000')
numpy
,pandas
versi.