我正在使用熊猫数据框,该数据框是使用以下日期列表创建的:
date_list =
DatetimeIndex(['2015-02-06', '2015-02-09', '2015-02-15', '2015-02-17',
'2015-02-18', '2015-02-21', '2015-02-22', '2015-02-23',
'2015-02-24', '2015-02-25',
...
'2016-12-22', '2016-12-23', '2016-12-24', '2016-12-25',
'2016-12-26', '2016-12-27', '2016-12-28', '2016-12-29',
'2016-12-30', '2016-12-31'],
dtype='datetime64[ns]', length=547, freq=None)
上面的列表有547个日期,我正在使用它们创建一个空的数据框:
df = pd.DataFrame(index=date_list, columns=list('ABCD')
我需要将索引频率设为每小时,为此,我需要执行以下操作:
df = df.asfreq(freq='1H')
但是,结果数据框现在具有695个唯一日期,而预期的是547个。有人能指出我可能做错了吗?
答案 0 :(得分:2)
以您的前两个日期为例
l=['2015-02-06', '2015-02-09']
df=pd.DataFrame(index=l,columns=list('ABCD'))
df.index=pd.to_datetime(df.index)
df
A B C D
2015-02-06 NaN NaN NaN NaN
2015-02-09 NaN NaN NaN NaN
在asfreq
df.asfreq(freq='1H')
A B C D
2015-02-06 00:00:00 NaN NaN NaN NaN
2015-02-06 01:00:00 NaN NaN NaN NaN
2015-02-06 02:00:00 NaN NaN NaN NaN
2015-02-06 03:00:00 NaN NaN NaN NaN
...
2015-02-08 20:00:00 NaN NaN NaN NaN
2015-02-08 21:00:00 NaN NaN NaN NaN
2015-02-08 22:00:00 NaN NaN NaN NaN
2015-02-08 23:00:00 NaN NaN NaN NaN
2015-02-09 00:00:00 NaN NaN NaN NaN
[73 rows x 4 columns]
由于您在asfreq
之间的日期间隔将使该日期充满一小时,因此您将获得'2015-02-08'等。
如何修复
df=df[df.index.to_series().dt.date.astype(str).isin(l)]