重新索引python数据框正在创建NaN值

时间:2017-01-12 23:34:35

标签: 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  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方法之前。所以前锋不是罪魁祸首。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

选项3
最安全的方法,非常一般 up-sample to daily,然后按月变换组

这一点很重要的原因是你的一天可能不会落在这个月的第一天。如果您想确保该月份的每隔一天广播该值,请执行此操作

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
resample

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

pandas=0.16.1

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

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

enter image description here

答案 1 :(得分:1)

在调用reindex

之前,需要在原始数据帧中添加索引
>>> inspect_json(1,data)
aws:OperationRequest
  -aws:RequestId
aws:UrlInfoResult
  -aws:Alexa
    --aws:ContentData
    --aws:Related
    --aws:TrafficData
  -aws:ResponseStatus
    --@xmlns:aws
    --aws:StatusCode