考虑下面的数组
dt = DatetimeIndex(['2016-01-01', '2016-01-01', '2016-01-21', '2016-01-21'], dtype='datetime64[ns]', name=u'date', freq=None)
我转换上面的to_julian_date()
dtype
j = dt.to_julian_date()
Float64Index([2457388.5, 2457388.5, 2457408.5, 2457408.5], dtype='float64')
如何将j
转换回dt
我试过
dt = pd.to_datetime(j, errors = 'coerce')
它将j
转换回datetime对象,但值不相同,这是输出
DatetimeIndex(['1970-01-01 00:00:00.002457388',
'1970-01-01 00:00:00.002457388',
'1970-01-01 00:00:00.002457408',
'1970-01-01 00:00:00.002457408'],
dtype='datetime64[ns]', freq=None)
答案 0 :(得分:5)
Julian dates是很久以前的天数。大熊猫时间戳时代之前的一段时间。我们指的是跟踪时间系统开始跟踪时间的开始。适用于Timestamp
,即1970-01-01'。我所做的是将Timestamp
时代与pd.to_datetime(0, unit='s')
联系起来。这是第一个pandas.Timestamp
。然后,我通过在Timestamp
上运行to_julian_date()
,从Julian Date的开头指定Timestamp
的天数。既然我有从Julian开始日期开始到Timestamp
时代的天数,我会从j
中的每个Julian日期中减去该日期,这将成为Timestamp
中的天数。 {1}}纪元(或'1970-01-01'
)。然后,我可以使用pd.to_datetime(j - epoch, unit='D')
向我提供Timestamps
,其中每个值代表Timestamp
时代的天数。
我希望这很清楚; - )
首先找到julian_date
纪元的pd.Timestamp
epoch = pd.to_datetime(0, unit='s').to_julian_date()
然后使用参数pd.to_datetime
unit='D'
进行转换
pd.to_datetime(j - epoch, unit='D')
DatetimeIndex(['2016-01-01', '2016-01-01', '2016-01-21', '2016-01-21'], dtype='datetime64[ns]', freq=None)