我的数据框看起来像这样,带有月度数据点:
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
方法之前。所以前锋不是罪魁祸首。
为什么会发生这种情况?
答案 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()
所有这些样本数据集都产生相同的结果
答案 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