熊猫:转换日期和小时数

时间:2018-09-11 17:55:06

标签: python pandas datetime

我有以下数据框:

df.head()
Out[195]: 
   day  hour  power_kW
0   24     1   0.38180
1   24     2   0.17802
2   24     3   0.22356
3   24     4   0.17710
4   24     5   0.19389

其中的天列代表日期:24对应于1月24日(年份为2013),而日期151对应于5月31日。

数据框中的每一天都有24小时,这对应于功率的测量值。

我想获得一个包含年,日,月和小时的日期时间列。为此,我运行以下命令:

df['date'] = pd.to_datetime(df['day']-1,errors='ignore', unit='d',origin='2013-01')

,数据框变成这样:

df2.head()
Out[197]: 
   day  hour  power_kW       date
0   24     1   0.38180 2013-01-24 00:00:00
1   24     2   0.17802 2013-01-24 00:00:00
2   24     3   0.22356 2013-01-24 00:00:00
3   24     4   0.17710 2013-01-24 00:00:00
4   24     5   0.19389 2013-01-24 00:00:00

我想将信息“小时”添加到“日期”列。我不想按1小时的时间范围按时间范围生成日期列,因为可能缺少数据。

是否可以在pd.to_datetime指令中做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:1)

从您已经创建的date列开始,将熊猫timedeltaunit='h'一起使用:

df['date'] = df['date'] + pd.to_timedelta(df['hour'], unit='h')

>>> df
   day  hour  power_kW                date
0   24     1   0.38180 2013-01-24 01:00:00
1   24     2   0.17802 2013-01-24 02:00:00
2   24     3   0.22356 2013-01-24 03:00:00
3   24     4   0.17710 2013-01-24 04:00:00
4   24     5   0.19389 2013-01-24 05:00:00

您也可以从原始数据帧开始从头开始:

df['date'] = (pd.to_datetime(df['day']-1,errors='ignore',
                             unit='d',origin='2013-01') +
              pd.to_timedelta(df['hour'], unit='h'))