我的数据集中缺少这样的日期。
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())
这里我从2015-01-01到2015-01-06获得DatetimeIndex。
>>> 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。
我的错误是什么?
答案 0 :(得分:1)
试试这个:
import numpy as np
df2 = pd.DataFrame(np.nan, index=index)
df.combine_first(df2).fillna(method='ffill')
combine_first
会将nan
中的df2
值替换为原始df
中的值({1}}。然后,您可以使用nan
填充剩余的fillna
值。