Как заполнить данные временных рядов с некоторыми недостающими датами с пандами


У меня есть набор данных с пропущенными датами, как это.

date,value
2015-01-01,7392
2015-01-03,4928
2015-01-06,8672
Это то, чего я ожидаю достичь.
date,value
2015-01-01,7392
2015-01-02,7392 # ffill 1st
2015-01-03,4928
2015-01-04,4928 # ffill 3rd
2015-01-05,4928 # ffill 3rd
2015-01-06,8672

Я много пробовал, читал документацию, но так и не смог найти решение. Я догадался, используя df.resample ('d', fill_method= 'ffill'), но я все еще не достигаю здесь. Может ли кто-нибудь помочь мне решить эту проблему? Вот что я сделал.
>>> import pandas as pd
>>> df = pd.read_csv(text,sep="t",index_col='date')
>>> df.index = df.index.to_datetime()
>>> index = pd.date_range(df.index[1],df.index.max())

Здесь я получаю DatetimeIndex с 2015-01-01 по 2015-01-06.

>>> values = [ x for x in range(len(index)) ]
>>> df2 = pd.DataFrame(values,index=index)

Далее я собираюсь объединить исходные данные и DatetimeIndex.

>>> df + df2

             0   value
2015-01-01 NaN NaN
2015-01-02 NaN NaN
2015-01-03 NaN NaN
2015-01-04 NaN NaN
2015-01-05 NaN NaN
2015-01-06 NaN NaN

Нэн? Я озадачен.

>>> df3 = df + df2
>>> df3.info()

DatetimeIndex: 10 entries, 2015-01-01 to 2015-01-10
Data columns (total 2 columns):
value    0 non-null float64
dtypes: float64(1)
Исходное значение было int, но оно было преобразовано в float.

В чем моя ошибка?

1 3

1 ответ:

Попробуйте вот что:

import numpy as np
df2 = pd.DataFrame(np.nan, index=index)
df.combine_first(df2).fillna(method='ffill')

combine_first заменит значения nan в df2 значениями из исходного df, когда они существуют. Затем вы можете заполнить оставшиеся значения nan с помощью fillna.