вставить строки для пропущенных значений ряда дата-время в pandas фреймах данных - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть некоторый временной ряд, записанный с шагом в 1 минуту без записей, если значение x равно 0. Файл данных выглядит следующим образом:

Date;Time;x 20.02.2020;00:00:00;0.1 20.02.2020;00:03:00;0.4 20.02.2020;00:04:00;0.3 20.02.2020;00:05:00;0.3 20.02.2020;00:07:00;0.2

Я хочу заполнить недостающие записи, имеющие х = 0,0. Ожидаемый результат:

Date;Time;x 20.02.2020;00:00:00;0.1 20.02.2020;00:01:00;0.0 20.02.2020;00:02:00;0.0 20.02.2020;00:03:00;0.4 20.02.2020;00:04:00;0.3 20.02.2020;00:05:00;0.3 20.02.2020;00:06:00;0.0 20.02.2020;00:07:00;0.2

Я пытался:

import pandas as pd

with open('data.csv') as csv_file:
    df = pd.read_csv(csv_file, delimiter=';',parse_dates={'datetime': ['Date', 'Time']})
df.set_index(['datetime'])
df.asfreq(freq='1Min', fill_value=0.0)

И я получаю:

datetime x 1970-01-01 1970-01-01 0.0

Нет сообщения об ошибке. Что не так?

1 Ответ

2 голосов
/ 28 февраля 2020

Поскольку ваша set_index операция не выполняется на месте, лучше всего объединить ваши методы:

df.set_index('datetime').asfreq('1min', fill_value=0).reset_index()

Или с resample:

df.set_index('datetime').resample('1min').first().fillna(0).reset_index()
             datetime    x
0 2020-02-20 00:00:00  0.1
1 2020-02-20 00:01:00  0.0
2 2020-02-20 00:02:00  0.0
3 2020-02-20 00:03:00  0.4
4 2020-02-20 00:04:00  0.3
5 2020-02-20 00:05:00  0.3
6 2020-02-20 00:06:00  0.0
7 2020-02-20 00:07:00  0.2

Или исправьте свой код:

df = df.set_index('datetime')
df.asfreq(freq='1Min', fill_value=0)
...