求助:将模拟时长列转换为以2021-05-01为起始的Datetime列
问题描述
我定义了如下datetime对象作为模拟参考起始时间:
import pandas as pd from datetime import datetime t0=datetime.strptime("01/01/2011 00:00:00", "%d/%m/%Y %H:%M:%S")
我尝试将t0转换为总小时数后与DataFrame的Hours列相加,期望得到以2021-01-01为起始的datetime列,但始终未成功。
我的Hours列记录的是从t0开始的时长数据:
模型输出的时长数据: Hours 0 44317.0 1 44317.250393519 2 44317.500138889 3 44317.750462963 4 44318.00005787 5 44318.250266204 6 44318.500543981 7 44318.7503125 8 44319.000520833 9 44319.250729167 10 44319.500428241
在Excel中将该列转换为日期格式后,得到了我期望的结果(从2021-05-01开始的时间):
期望输出: Hours 1 5/1/21 0:00 2 5/1/21 6:00 3 5/1/21 12:00 4 5/1/21 18:00 5 5/2/21 0:00 6 5/2/21 6:00 7 5/2/21 12:00 8 5/2/21 18:00 9 5/3/21 0:00 10 5/3/21 0:00
但在Python中直接使用pd.to_datetime(df.Hours)转换Hours列时,得到的却是以1970-01-01为起始的结果,这并非我想要的:
Python输出(非期望结果): Hours 0 1970-01-01 00:00:00.000044317 1 1970-01-01 00:00:00.000044317 2 1970-01-01 00:00:00.000044317 3 1970-01-01 00:00:00.000044317 4 1970-01-01 00:00:00.000044318 5 1970-01-01 00:00:00.000044318 6 1970-01-01 00:00:00.000044318 7 1970-01-01 00:00:00.000044318 8 1970-01-01 00:00:00.000044319 9 1970-01-01 00:00:00.000044319 10 1970-01-01 00:00:00.000044319
请问如何将其转换为以2021年5月1日为起始的datetime列?
解决方案
根据Michael S.的回答:Hours列实际上并非小时数而是天数,由于使用的软件采用类似Excel的1900-01-01纪元时间,误将天数标注为小时数。使用以下代码即可得到正确结果:
pd.to_datetime(df.Hours, unit='d', origin='1900-01-01')
内容的提问来源于stack exchange,提问作者ZVY545
相关产品推荐
相关产品推荐

