Python'un datetime modülü, numpy'nin datetime64 / timedelta64 ve pandaların Zaman Damgası / Timedelta nesneleri arasındaki ilişkiyi daha iyi açıklamak için daha sağlam bir çaba olabileceğini düşünüyorum.
Python'un datetime standart kütüphanesi
Datetime standart kitaplığında dört ana nesne bulunur
- zaman - sadece zaman, saat, dakika, saniye ve mikrosaniye olarak ölçülür
- tarih - yalnızca yıl, ay ve gün
- datetime - Zamanın ve tarihin tüm bileşenleri
- timedelta - Maksimum gün birimi ile süre
Bu dört nesneyi oluştur
>>> 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)
NumPy'nin datetime64 ve timedelta64 nesneleri
NumPy'nin ayrı bir tarih ve saat nesnesi yoktur, yalnızca tek bir anı temsil eden tek bir datetime64 nesnesi vardır. Datetime modülünün datetime nesnesi mikrosaniye hassasiyetine sahiptir (saniyenin milyonda biri). NumPy'nin datetime64 nesnesi, hassasiyetini saatten sonuna kadar ayarlamanızı sağlar (10 ^ -18). Yapıcısı daha esnektir ve çeşitli girdiler alabilir.
NumPy'nin datetime64 ve timedelta64 nesnelerini oluşturma
Birimler için dize içeren bir tam sayı iletin. Tüm birimleri burada görebilirsiniz . UNIX döneminden sonra bu birçok birime dönüştürülür: 1 Oca 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Dizeleri ISO 8601 biçiminde oldukları sürece de kullanabilirsiniz.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Zaman çizelgelerinin tek bir birimi var
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Ayrıca iki datetime64 nesnesini çıkararak bunları oluşturabilir
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp ve Timedelta, NumPy'nin üzerine çok daha fazla işlevsellik kazandırıyor
Bir pandalar Zaman Damgası, datetime'a çok benzer, ancak çok daha fazla işlevselliğe sahip bir andır. Bunlardan birini pd.Timestamp
veya ile oluşturabilirsiniz 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
çok benzer şekilde çalışır (birkaç seçenekle birlikte) ve bir dize listesini Zaman Damgalarına dönüştürebilir.
>>> 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)
Python tarih saatini datetime64 ve Zaman damgasına dönüştürme
>>> 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')
Numpy datetime64 değerini datetime ve Timetamp'a dönüştürme
>>> 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)
Zaman Damgasına Dönüştür
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Dönüştürmek Zaman Damgası dan datetime ve datetime64
Panda zaman damgaları çok güçlü olduğu için bu oldukça kolaydır
>>> 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
sürümleri.