Python asfreq()返回一个空数据帧
我有一个带有DateTimeIndex的数据帧: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
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,使用该命令,原始数据帧不会受到任何影响。所以,我认为这一步是错误的。然后,我尝试将结果赋给一个值,结果成功了。我能够继续我的时间序列研究