为什么Pandas Asfreq产生的日期不在输入列表中?

时间:2019-01-09 02:02:53

标签: python pandas

我正在使用熊猫数据框,该数据框是使用以下日期列表创建的:

 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个。有人能指出我可能做错了吗?

1 个答案:

答案 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)]