Заполните пропущенные часы в кадре данных pandas

avatar
Niraj Pushparaja
8 августа 2021 в 17:07
89
1
0

У меня есть набор данных, который содержит почасовые данные

 Date              Count
20200101 0:00:00    1352
20200101 1:00:00    1250
20200101 2:00:00    1022
20200101 3:00:00    628
20200101 4:00:00    2984
20200101 6:00:00    1694
20200101 7:00:00    2804
20200101 8:00:00    1050
20200101 9:00:00    540
20200101 13:00:00   4282

как я могу заполнить пропущенные часы счетом 0

Ожидаемые результаты

20200101 10:00:00   0
20200101 11:00:00   0
20200101 12:00:00   0

Это мой код.

import cx_Oracle
import pandas as pd
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

df_full = pd.read_sql('SELECT * FROM  1H_FILE_COUNT order by event_date asc', conn1)

# Rename Column

df_full = df_full.rename(columns={'EVENT_DATE': 'ds','FILE_COUNT' : 'y'})

# set Datatime Index for column[0]

df_full['ds'] = pd.DatetimeIndex(df_full['ds'])


df_full.head(20)
Источник
RJ Adriaansen
8 августа 2021 в 17:13
0

Отвечает ли это на ваш вопрос? Заполните пропущенные часы в фрейме данных pandas

Ответы (1)

avatar
Corralien
8 августа 2021 в 17:12
1

Сначала преобразовать в дату и время, установить индекс, передискретизировать и заполнить значения:

# df['Date'] = pd.to_datetime(df['Date'])

>>> df.set_index('Date').resample('H').asfreq(fill_value=0).reset_index()
                  Date             Count
0  2020-01-01 00:00:00              1352
1  2020-01-01 01:00:00              1250
2  2020-01-01 02:00:00              1022
3  2020-01-01 03:00:00               628
4  2020-01-01 04:00:00              2984
5  2020-01-01 05:00:00                 0
6  2020-01-01 06:00:00              1694
7  2020-01-01 07:00:00              2804
8  2020-01-01 08:00:00              1050
9  2020-01-01 09:00:00               540
10 2020-01-01 10:00:00                 0
11 2020-01-01 11:00:00                 0
12 2020-01-01 12:00:00                 0
13 2020-01-01 13:00:00              4282

Если вы хотите сохранить формат даты:

>>> df['Date'].dt.strftime('%Y%m%d %-H:%M:%S')
0      20200101 0:00:00
1      20200101 1:00:00
2      20200101 2:00:00
3      20200101 3:00:00
4      20200101 4:00:00
5      20200101 5:00:00
6      20200101 6:00:00
7      20200101 7:00:00
8      20200101 8:00:00
9      20200101 9:00:00
10    20200101 10:00:00
11    20200101 11:00:00
12    20200101 12:00:00
13    20200101 13:00:00
Name: Date, dtype: object
Niraj Pushparaja
8 августа 2021 в 17:25
0

Я пытался, но получаю сообщение об ошибке, поскольку не могу переиндексировать дублирующую ось # установить индекс времени данных для столбца [0] df_full['ds'] = pd.DatetimeIndex(df_full['ds']) df_full.set_index('ds').resample( 'H').asfreq(fill_value=0).reset_index()

Niraj Pushparaja
8 августа 2021 в 17:57
0

Проблема отсортирована. Дубликат записи был. Спасибо за поддержку