转换自' to_julian_date()'到' np.datetime64'

时间:2016-12-15 00:17:12

标签: python pandas numpy

考虑下面的数组

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)

1 个答案:

答案 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)