Python asfreq()返回一个空数据帧

Python asfreq()返回一个空数据帧,python,pandas,Python,Pandas,我有一个带有DateTimeIndex的数据帧: import pandas as pd from pandas.tseries.offsets import * data = pd.read_excel('P:\\Simon\\govt_bond_yields.xlsx') data.head() USA Italy UK EURO ZONE GREECE GERMANY 2018-06-25 2.8748 2.782 1.299 0

我有一个带有DateTimeIndex的数据帧:

import pandas as pd
from pandas.tseries.offsets import *

data = pd.read_excel('P:\\Simon\\govt_bond_yields.xlsx')
data.head()

              USA   Italy   UK   EURO ZONE  GREECE  GERMANY
2018-06-25  2.8748  2.782   1.299   0.327   4.102   0.327
2018-06-22  2.8949  2.694   1.319   0.335   4.114   0.335
2018-06-21  2.8967  2.732   1.277   0.333   4.279   0.333
2018-06-20  2.9389  2.549   1.297   0.375   4.332   0.375
2018-06-19  2.8967  2.557   1.283   0.370   4.344   0.370
目前我的索引没有频率

data.index

DatetimeIndex(['2018-06-25', '2018-06-22', '2018-06-21', '2018-06-20',
               '2018-06-19', '2018-06-18', '2018-06-15', '2018-06-14',
               '2018-06-13', '2018-06-12',
               ...
               '2015-01-27', '2015-01-26', '2015-01-23', '2015-01-22',
               '2015-01-21', '2015-01-20', '2015-01-16', '2015-01-15',
               '2015-01-14', '2015-01-13'],
              dtype='datetime64[ns]', length=862, freq=None)
我试图设置索引频率,但在设置之后,我得到一个空的数据帧

data.asfreq(freq='D')

USA Italy UK EURO ZONE  GREECE  GERMANY

我在这里做错了什么?

如果您首先对索引进行排序,这应该会起作用,因为
asfreq
很难知道您想要做什么。例如:

# Unsorted data with a datetime index:
>>> data
               USA  Italy     UK  EURO ZONE  GREECE  GERMANY
2018-06-25  2.8748  2.782  1.299      0.327   4.102    0.327
2018-06-22  2.8949  2.694  1.319      0.335   4.114    0.335
2018-06-21  2.8967  2.732  1.277      0.333   4.279    0.333
2018-06-20  2.9389  2.549  1.297      0.375   4.332    0.375
2018-06-19  2.8967  2.557  1.283      0.370   4.344    0.370

>>> data.sort_index().asfreq(freq='D')
               USA  Italy     UK  EURO ZONE  GREECE  GERMANY
2018-06-19  2.8967  2.557  1.283      0.370   4.344    0.370
2018-06-20  2.9389  2.549  1.297      0.375   4.332    0.375
2018-06-21  2.8967  2.732  1.277      0.333   4.279    0.333
2018-06-22  2.8949  2.694  1.319      0.335   4.114    0.335
2018-06-23     NaN    NaN    NaN        NaN     NaN      NaN
2018-06-24     NaN    NaN    NaN        NaN     NaN      NaN
2018-06-25  2.8748  2.782  1.299      0.327   4.102    0.327
您可以检查索引以确保其工作正常:

# Check the index:
>>> data.sort_index().asfreq(freq='D').index
DatetimeIndex(['2018-06-19', '2018-06-20', '2018-06-21', '2018-06-22',
               '2018-06-23', '2018-06-24', '2018-06-25'],
              dtype='datetime64[ns]', freq='D')

IIUC,我想你要做的是用
asfreq
重新采样:

data.resample('D').asfreq()
输出:

               USA  Italy     UK  EURO ZONE  GREECE  GERMANY
2018-06-19  2.8967  2.557  1.283      0.370   4.344    0.370
2018-06-20  2.9389  2.549  1.297      0.375   4.332    0.375
2018-06-21  2.8967  2.732  1.277      0.333   4.279    0.333
2018-06-22  2.8949  2.694  1.319      0.335   4.114    0.335
2018-06-23     NaN    NaN    NaN        NaN     NaN      NaN
2018-06-24     NaN    NaN    NaN        NaN     NaN      NaN
2018-06-25  2.8748  2.782  1.299      0.327   4.102    0.327

这是对Sacul答案的改进

df2=datatable_df.sort_index().asfreq(freq='YS')

注意:根据sacul,使用该命令,原始数据帧不会受到任何影响。所以,我认为这一步是错误的。然后,我尝试将结果赋给一个值,结果成功了。我能够继续我的时间序列研究