是否有一种简单的方法可以将DatetimeIndex
转换为多年的数组,包括小时,分钟等组件?
例如,转换pd.date_range("2014-01-01 00:00", periods=4, freq="12H")
应该会给我[1.0, 1.5, 2.0, 2.5]
。
答案 0 :(得分:3)
Timedelta功能需要0.15.0。这将具有您日期的完全精确度。
In [19]: s
Out[19]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01 00:00:00, ..., 2014-01-02 12:00:00]
Length: 4, Freq: 12H, Timezone: None
In [21]: s-s[0]
Out[21]:
<class 'pandas.tseries.tdi.TimedeltaIndex'>
['0 days 00:00:00', ..., '1 days 12:00:00']
Length: 4, Freq: None
In [22]: ((s-s[0]) / pd.Timedelta(1.0,unit='D')) + 1
Out[22]: Float64Index([1.0, 1.5, 2.0, 2.5], dtype='float64')
TimedeltaIndex除以Timedelta会得到一个(浮点)分数。日期为0,所以我们加回1。
以上“假设”所有日期都在同一年。这是一种更健壮的方法(目前不支持datetimeindex减法)
In [53]: pd.TimedeltaIndex(s.asi8-s.to_period('A').to_timestamp().asi8)
Out[53]:
<class 'pandas.tseries.tdi.TimedeltaIndex'>
['0 days 00:00:00', ..., '1 days 12:00:00']
Length: 4, Freq: None
答案 1 :(得分:1)
我不确定是否有内置方法可以更整齐地实现这一点,但您可以这样做:
dr = pd.date_range("2014-01-01 00:00", periods=4, freq="12H")
dr.dayofyear + dr.hour / 24.0
Out[8]: array([ 1. , 1.5, 2. , 2.5])
不幸的是,通过这种方法,我认为你必须创建足够的术语来达到你想要的精度,例如:包括会议纪要:
dr.dayofyear + dr.hour / 24.0 + dr.minute / (24.0 * 60)