Панды, заполняющие недостающее значение из вчерашних данных (тот же DataTime) в питоне - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь заполнить пропущенное значение вчера (однодневными данными) в python.для того же, я пытаюсь с помощью следующего кода, но не получаю ожидаемый вывод.

Код

import pandas as pd

df = pd.read_csv(r'input_3.csv')
saved_column = df.Value #you can also use df['column_name']


df['DateTime'] = pd.DatetimeIndex(df['DateTime'])

b = df.loc[df.Value.isnull(), 'Value'] = \
              df.loc[df.Value.isnull(), 'Value'].map(df.loc[df.Value.notnull()] \
                .set_index('DateTime')['Value'])
print b

Вчерашние данные:

block   DateTime    Value
1   09-01-2016 00:00    -0.886492
2   09-01-2016 01:00    -0.500995
3   09-01-2016 02:00    4
4   09-01-2016 03:00    5
5   09-01-2016 04:00    2.145205
6   09-01-2016 05:00    0.475309

СегодняшниеДанные:

1   10-01-2016 00:00    -0.886492
2   10-01-2016 01:00    -0.500995
3   10-01-2016 02:00    NaN
4   10-01-2016 03:00    NaN
5   10-01-2016 04:00    2.145205
6   10-01-2016 05:00    0.475309

Ожидается заполнить сегодняшние данные:

1   10-01-2016 00:00    -0.886492
2   10-01-2016 01:00    -0.500995
3   10-01-2016 02:00    5
4   10-01-2016 03:00    2.145205
5   10-01-2016 04:00    2.145205
6   10-01-2016 05:00    0.475309

Пожалуйста, предложите мне какой-то подход к тому же.Заранее спасибо

Я попытался использовать этот пост Заполнить значения из одного кадра данных в другой с соответствующими идентификаторами , но не получил ожидаемый результат

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете использовать read_csv с другим параметром index_col, parse_dates и dayfirst=True для DatetimeIndex сначала:

df = pd.read_csv(r'input_3.csv', index_col=[1], parse_dates=[1], dayfirst=True)
print (df)
                     block     Value
DateTime                            
2016-01-09 00:00:00      1 -0.886492
2016-01-09 01:00:00      2 -0.500995
2016-01-09 02:00:00      3  4.000000
2016-01-09 03:00:00      4  5.000000
2016-01-09 04:00:00      5  2.145205
2016-01-09 05:00:00      6  0.475309
2016-01-10 00:00:00      1 -0.886492
2016-01-10 01:00:00      2 -0.500995
2016-01-10 02:00:00      3       NaN
2016-01-10 03:00:00      4       NaN
2016-01-10 04:00:00      5  2.145205
2016-01-10 05:00:00      6  0.475309

И затем заменить NaNс fillna с shift ed datetime s за один день:

df['Value'] = df['Value'].fillna(df.shift(freq='1d')['Value'])
df = df.reset_index()
print (df)
              DateTime  block     Value
0  2016-01-09 00:00:00      1 -0.886492
1  2016-01-09 01:00:00      2 -0.500995
2  2016-01-09 02:00:00      3  4.000000
3  2016-01-09 03:00:00      4  5.000000
4  2016-01-09 04:00:00      5  2.145205
5  2016-01-09 05:00:00      6  0.475309
6  2016-01-10 00:00:00      1 -0.886492
7  2016-01-10 01:00:00      2 -0.500995
8  2016-01-10 02:00:00      3  4.000000
9  2016-01-10 03:00:00      4  5.000000
10 2016-01-10 04:00:00      5  2.145205
11 2016-01-10 05:00:00      6  0.475309
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...