如何使用熊猫完成缺少一些日期的时间序列数据

Aki*_*Omi 5 python time-series pandas

我有像这样缺少日期的数据集。

date,value
2015-01-01,7392
2015-01-03,4928
2015-01-06,8672
Run Code Online (Sandbox Code Playgroud)

这是我期望实现的目标。

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
Run Code Online (Sandbox Code Playgroud)

我尝试了很多,我阅读了文档,但找不到解决方案。我猜想使用 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())
Run Code Online (Sandbox Code Playgroud)

在这里,我得到了从 2015-01-01 到 2015-01-06 的 DatetimeIndex。

>>> values = [ x for x in range(len(index)) ]
>>> df2 = pd.DataFrame(values,index=index)
Run Code Online (Sandbox Code Playgroud)

接下来我要合并原始数据和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
Run Code Online (Sandbox Code Playgroud)

南?我很困惑。

>>> 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)
Run Code Online (Sandbox Code Playgroud)

原始值是 int,但它转换为 float。

我的错误是什么?

Ian*_*anS 1

尝试这个:

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

combine_first当原始值存在时,将用原始值替换nan其中的值。然后您可以用 填充剩余的值。df2dfnanfillna