首页 > 解决方案 > pandas:转换天数和小时数

问题描述

我有以下数据框:

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

其中day栏代表天数: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

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

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

提前致谢。

标签: pythonpandasdatetime

解决方案


从您已经创建的列开始,使用带有以下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'))

推荐阅读