ฉันคิดว่าอาจมีความพยายามที่รวมกันมากขึ้นในการตอบเพื่ออธิบายความสัมพันธ์ระหว่างโมดูลวันที่และเวลาของ Python, datetime64 / timedelta64 และ numpy กับ Timestamp / Timedelta ของ pandas
ไลบรารีมาตรฐาน datetime ของ Python
ไลบรารีมาตรฐาน datetime มีสี่วัตถุหลัก
- เวลา - เวลาเท่านั้นวัดเป็นชั่วโมงนาทีวินาทีและไมโครวินาที
- วันที่ - เฉพาะปีเดือนและวัน
- datetime - ส่วนประกอบทั้งหมดของเวลาและวันที่
- timedelta - จำนวนเวลาที่มีหน่วยเป็นวันสูงสุด
สร้างวัตถุทั้งสี่นี้
>>> 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)
วัตถุ datetime64 และ timedelta64 ของ NumPy
NumPy ไม่มีวัตถุวันที่และเวลาที่แยกกันเพียงแค่วัตถุ datetime64 เดียวเพื่อแสดงช่วงเวลาหนึ่ง วัตถุ datetime ของโมดูล datetime มีความแม่นยำระดับไมโครวินาที (หนึ่งในล้านของวินาที) วัตถุ datetime64 ของ NumPy ช่วยให้คุณสามารถตั้งค่าความแม่นยำของมันได้จากหลายชั่วโมงไปจนถึง attoseconds (10 ^ -18) มันเป็นคอนสตรัคเตอร์มีความยืดหยุ่นมากกว่าและสามารถรับอินพุตได้หลากหลาย
สร้างวัตถุ datetime64 และ timedelta64 ของ NumPy
ส่งจำนวนเต็มด้วยสตริงสำหรับหน่วย ดูทุกหน่วยงานที่นี่ มันถูกแปลงเป็นหน่วยจำนวนมากหลังจากยุค UNIX: 1 ม.ค. 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
คุณยังสามารถใช้สตริงได้ตราบใดที่มันอยู่ในรูปแบบ ISO 8601
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Timedeltas มีหน่วยเดียว
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
ยังสามารถสร้างพวกเขาโดยการลบวัตถุสอง datetime64
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp และ Timedelta สร้างฟังก์ชันการทำงานอื่น ๆ อีกมากมายที่ด้านบนของ NumPy
Timestamp ของแพนด้าเป็นช่วงเวลาที่คล้ายกับเวลาและมีการใช้งานมากกว่า คุณสามารถสร้างพวกเขาด้วยอย่างใดอย่างหนึ่งหรือpd.Timestamp
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
ทำงานคล้ายกันมาก (มีตัวเลือกน้อย) และสามารถแปลงรายการสตริงเป็น Timestamps
>>> 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 เป็น datetime64 และ 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')
การแปลง numpy datetime64 เป็น datetime และ 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)
แปลงเป็น Timestamp
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
แปลงจาก Timestamp เป็น datetime และ datetime64
ค่อนข้างง่ายเนื่องจากการประทับเวลาของนุ่นมีประสิทธิภาพมาก
>>> 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
รุ่น