Pandas 如何使用pd.to_datetime()设置频率?
在安装statsmodel时,我收到了关于日期频率的警告 首先,我导入一个数据集:Pandas 如何使用pd.to_datetime()设置频率?,pandas,Pandas,在安装statsmodel时,我收到了关于日期频率的警告 首先,我导入一个数据集: import statsmodels as sm df = sm.datasets.get_rdataset(package='datasets', dataname='airquality').data df['Year'] = 1973 df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day']]) df.drop(columns=['Year', 'M
import statsmodels as sm
df = sm.datasets.get_rdataset(package='datasets', dataname='airquality').data
df['Year'] = 1973
df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day']])
df.drop(columns=['Year', 'Month', 'Day'], inplace=True)
df.set_index('Date', inplace=True, drop=True)
接下来,我尝试拟合SES模型:
fit = sm.tsa.api.SimpleExpSmoothing(df['Wind']).fit()
返回此警告:
/anaconda3/lib/python3.6/site packages/statsmodels/tsa/base/tsa_model.py:171:value警告:未提供频率信息,因此将使用推断频率D。
%频率、值(警告)
我的数据集是每日的,因此推断“D”是可以的,但我想知道如何手动设置频率
请注意,DatetimeIndex没有freq(最后一行)
据我所知,我已经检查了缺失的日期,但似乎没有:
pd.date_range(start = '1973-05-01', end = '1973-09-30').difference(df.index)
DatetimeIndex([],dtype='datetime64[ns]',freq='D')
我应该如何设置索引的频率?我认为
pd。要想\u datetime
不设置默认频率,需要:
但如果索引中的重复值出现错误:
df = pd.concat([df, df])
df = df.set_index('Date')
print (df.asfreq('d').index)
ValueError:无法从重复轴重新编制索引
解决方案是使用重采样
和一些聚合函数:
print (df.resample('2D').mean().index)
DatetimeIndex(['1973-05-01', '1973-05-03', '1973-05-05', '1973-05-07',
'1973-05-09', '1973-05-11', '1973-05-13', '1973-05-15',
'1973-05-17', '1973-05-19', '1973-05-21', '1973-05-23',
'1973-05-25', '1973-05-27', '1973-05-29', '1973-05-31',
'1973-06-02', '1973-06-04', '1973-06-06', '1973-06-08',
'1973-06-10', '1973-06-12', '1973-06-14', '1973-06-16',
'1973-06-18', '1973-06-20', '1973-06-22', '1973-06-24',
'1973-06-26', '1973-06-28', '1973-06-30', '1973-07-02',
'1973-07-04', '1973-07-06', '1973-07-08', '1973-07-10',
'1973-07-12', '1973-07-14', '1973-07-16', '1973-07-18',
'1973-07-20', '1973-07-22', '1973-07-24', '1973-07-26',
'1973-07-28', '1973-07-30', '1973-08-01', '1973-08-03',
'1973-08-05', '1973-08-07', '1973-08-09', '1973-08-11',
'1973-08-13', '1973-08-15', '1973-08-17', '1973-08-19',
'1973-08-21', '1973-08-23', '1973-08-25', '1973-08-27',
'1973-08-29', '1973-08-31', '1973-09-02', '1973-09-04',
'1973-09-06', '1973-09-08', '1973-09-10', '1973-09-12',
'1973-09-14', '1973-09-16', '1973-09-18', '1973-09-20',
'1973-09-22', '1973-09-24', '1973-09-26', '1973-09-28',
'1973-09-30'],
dtype='datetime64[ns]', name='Date', freq='2D')
该问题是由未明确设置频率引起的。在大多数情况下,您无法确保数据没有任何间隙,因此使用
rng=pd.date\u范围(开始='1973-05-01',结束='1973-09-30',频率='D')
使用此rng
重新索引数据帧,并使用您选择的方法或值填充np.nan
。使用“方法或选择值”表示asfreq()函数的参数“方法”或“填充值”,请参阅。
df = pd.concat([df, df])
df = df.set_index('Date')
print (df.asfreq('d').index)
print (df.resample('2D').mean().index)
DatetimeIndex(['1973-05-01', '1973-05-03', '1973-05-05', '1973-05-07',
'1973-05-09', '1973-05-11', '1973-05-13', '1973-05-15',
'1973-05-17', '1973-05-19', '1973-05-21', '1973-05-23',
'1973-05-25', '1973-05-27', '1973-05-29', '1973-05-31',
'1973-06-02', '1973-06-04', '1973-06-06', '1973-06-08',
'1973-06-10', '1973-06-12', '1973-06-14', '1973-06-16',
'1973-06-18', '1973-06-20', '1973-06-22', '1973-06-24',
'1973-06-26', '1973-06-28', '1973-06-30', '1973-07-02',
'1973-07-04', '1973-07-06', '1973-07-08', '1973-07-10',
'1973-07-12', '1973-07-14', '1973-07-16', '1973-07-18',
'1973-07-20', '1973-07-22', '1973-07-24', '1973-07-26',
'1973-07-28', '1973-07-30', '1973-08-01', '1973-08-03',
'1973-08-05', '1973-08-07', '1973-08-09', '1973-08-11',
'1973-08-13', '1973-08-15', '1973-08-17', '1973-08-19',
'1973-08-21', '1973-08-23', '1973-08-25', '1973-08-27',
'1973-08-29', '1973-08-31', '1973-09-02', '1973-09-04',
'1973-09-06', '1973-09-08', '1973-09-10', '1973-09-12',
'1973-09-14', '1973-09-16', '1973-09-18', '1973-09-20',
'1973-09-22', '1973-09-24', '1973-09-26', '1973-09-28',
'1973-09-30'],
dtype='datetime64[ns]', name='Date', freq='2D')