重新编制python数据框架的索引正在创建NaN值

重新编制python数据框架的索引正在创建NaN值,python,pandas,Python,Pandas,我有一个数据框,看起来像这样,有每月的数据点: Date Value 1 2010-01-01 18.45 2 2010-02-01 18.13 3 2010-03-01 18.25 4 2010-04-01 17.92 5 2010-05-01 18.85 我想让它成为每日数据,并用当前月份值填充生成的新日期。例如: Date Value 1 2010-01-01 18.45 2 2010-01-02 18.45 3 2

我有一个数据框,看起来像这样,有每月的数据点:

   Date        Value
1  2010-01-01  18.45
2  2010-02-01  18.13
3  2010-03-01  18.25
4  2010-04-01  17.92
5  2010-05-01  18.85 
我想让它成为每日数据,并用当前月份值填充生成的新日期。例如:

   Date        Value
1  2010-01-01  18.45
2  2010-01-02  18.45
3  2010-01-03  18.45
4  2010-01-04  18.45
5  2010-01-05  18.45 
....
这是我用来添加中间日期和填充值的代码:

today = get_datetime('US/Eastern') #.strftime('%Y-%m-%d')
enddate='1881-01-01'
idx = pd.date_range(enddate, today.strftime('%Y-%m-%d'), freq='D')
df = df.reindex(idx)
df = df.fillna(method = 'ffill')
结果如下:

                     Date   Value
2010-01-01 00:00:00  NaN    NaN
2010-01-02 00:00:00  NaN    NaN
2010-01-03 00:00:00  NaN    NaN
2010-01-04 00:00:00  NaN    NaN
2010-01-05 00:00:00  NaN    NaN 
日志显示
NaN
值出现在调用
.fillna
方法之前。因此,向前填充不是罪魁祸首


知道为什么会发生这种情况吗?

在调用reindex之前,需要向原始数据帧添加索引

test = pd.DataFrame(np.random.randn(4), index=pd.date_range('2017-01-01', '2017-01-04'), columns=['test'])
test.reindex(pd.date_range('2017-01-01', '2017-01-05'), method='ffill')
选项3
最安全的方法,非常通用
每天进行一次抽样,然后每月进行一次分组

这一点之所以重要,是因为你的一天可能不在月的第一天。如果要确保该天值在当月每隔一天广播一次,请执行以下操作

df.set_index('Date').asfreq('D') \
    .groupby(pd.TimeGrouper('M')).Value \
    .transform('first').reset_index()
选项2
asfreq

df.set_index('Date').asfreq('D').ffill().reset_index()
选项3
重新采样

df.set_index('Date').resample('D').first().ffill().reset_index()
对于
pandas=0.16.1

df.set_index('Date').resample('D').ffill().reset_index()

所有这些在这个样本数据集上产生相同的结果


Thx。我尝试了选项3,但出现了一个错误。我想知道这些方法是否在我工作的环境(Quantopian)中无法识别。您必须导入任何特定的内容才能运行这些功能吗?我正在运行pandas版本0.16.1TypeError:仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但获得了“Index”的实例,这次没有错误。但这并没有成为每日数据。奇怪。我可以在日志中看到它,它会在下游产生错误。