Как преобразовать строку времени в почасовые данные?

#python #date

Вопрос:

У меня есть фрейм данных панд о зависимости спроса на энергию от времени:

                  0      1
0   20201231T23-07  39815
1   20201231T22-07  41387
2   20201231T21-07  42798
3   20201231T20-07  44407
4   20201231T19-07  45612
5   20201231T18-07  44920
6   20201231T17-07  42617
7   20201231T16-07  41454
8   20201231T15-07  41371
9   20201231T14-07  41793
10  20201231T13-07  42298
11  20201231T12-07  42740
12  20201231T11-07  43185
13  20201231T10-07  42999
14  20201231T09-07  42373
15  20201231T08-07  41273
16  20201231T07-07  38909
17  20201231T06-07  37099
18  20201231T05-07  36022
19  20201231T04-07  35880
20  20201231T03-07  36305
21  20201231T02-07  36988
22  20201231T01-07  38166
23  20201231T00-07  40167
24  20201230T23-07  42624
25  20201230T22-07  44777
26  20201230T21-07  46205
27  20201230T20-07  47324
28  20201230T19-07  48011
29  20201230T18-07  46995
30  20201230T17-07  44902
31  20201230T16-07  44134
32  20201230T15-07  44228
33  20201230T14-07  44813
34  20201230T13-07  45187
35  20201230T12-07  45622
36  20201230T11-07  45831
37  20201230T10-07  45832
38  20201230T09-07  45476
39  20201230T08-07  44145
40  20201230T07-07  41650
 

Мне нужно преобразовать столбец времени в почасовые данные. Я знаю, что в Python есть некоторые инструменты, которые могут напрямую конвертировать даты, есть ли один, который я мог бы использовать здесь, или мне нужно будет сделать это вручную?

Ответ №1:

Ну, просто чтобы получить временную строку, которую вы могли бы использовать str.replace :

 df["time"] = df["0"].str.replace(r'^d{8}T(d{2})-(d{2})


Ответ №2:

Предполагая, что столбец времени в настоящее время является строкой, вы можете преобразовать его в дату и время, используя pd.to_datetime , а затем извлечь час.

Если вы хотите рассчитать, скажем, средний спрос за каждый час, который вы могли бы использовать groupby .

 df['time'] = pd.to_datetime(df['time'], format="%Y%m%dT%H-%M").dt.hour

df_demand_by_hour = df.groupby('time').mean()

print(df_demand_by_hour)
 
        demand
time
0     40167.0
1     38166.0
2     36988.0
3     36305.0
4     35880.0
5     36022.0
6     37099.0
7     40279.5
8     42709.0
9     43924.5
10    44415.5
11    44508.0
12    44181.0
13    43742.5
14    43303.0
15    42799.5
16    42794.0
17    43759.5
18    45957.5
19    46811.5
20    45865.5
21    44501.5
22    43082.0
23    41219.5
 

Ответ №3:

я не знаю точно, что означает -07, но вы можете преобразовать строку в дату и время, выполнив:

 import pandas as pd    
import datetime as dt

df['0'] = pd.to_datetime(df['0'], format = '%Y-%m-%d %H:%M:%S').dt.strftime('%H:%M:%S')

df
       0      1
0   23:00:00  39815
1   22:00:00  41387
2   21:00:00  42798
3   20:00:00  44407
4   19:00:00  45612
 ...
 

, r'1:2')

Ответ №2:

Предполагая, что столбец времени в настоящее время является строкой, вы можете преобразовать его в дату и время, используя pd.to_datetime , а затем извлечь час.

Если вы хотите рассчитать, скажем, средний спрос за каждый час, который вы могли бы использовать groupby .



Ответ №3:

я не знаю точно, что означает -07, но вы можете преобразовать строку в дату и время, выполнив: