Панды: преобразовать число дня и часа - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть следующий фрейм данных:

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 соответствует 24 января (год 2013), а число 151 соответствуетдо 31 мая.

Каждый день в кадре данных имеет 24 часа, которым соответствует измеренное значение мощности.

Я хочу получить столбец datetime, который содержит год, день,месяц и час.Для этого я запускаю эту команду:

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?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы также можете создать строку и указать явный формат:

s = '201301' + df['day'].astype(str).str.zfill(2) + df['hour'].astype(str).str.zfill(2)
df['date'] = pd.to_datetime(s, errors='ignore', format='%Y%m%d%H')

print(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
0 голосов
/ 11 сентября 2018

Начиная с столбца date, который вы уже создали, используйте панд timedelta с unit='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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...