有没有办法检索pandas中时间序列的频率?
rng = date_range('1/1/2011', periods=72, freq='H')
ts =pd.Series(np.random.randn(len(rng)), index=rng)
ts.frequency或ts.period不是可用的方法。
由于
修改 我们能否从时间序列中推断出未指定频率的频率?
import pandas.io.data as web
aapl = web.get_data_yahoo("AAPL")
<class 'pandas.tseries.index.DatetimeIndex'>
[2010-01-04 00:00:00, ..., 2013-12-19 00:00:00]
Length: 999, Freq: None, Timezone: None
我们能以某种方式获得aapl的频率吗?我们知道,这是工作日。
答案 0 :(得分:13)
要推断频率,只需使用内置的fct'infer_freq'
import pandas as pd
pd.infer_freq(ts.index)
答案 1 :(得分:11)
DatetimeIndex
>>> rng
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-01 00:00:00, ..., 2011-01-03 23:00:00]
Length: 72, Freq: H, Timezone: None
>>> len(rng)
72
>>> rng.freq
<1 Hour>
>>> rng.freqstr
'H'
与使用此索引编制索引的系列相似
>>> ts.index.freq
<1 Hour>
答案 2 :(得分:1)
@sweetdream 的回答实际上非常好,因为数据的频率并不总是作为索引的属性保留,所以如果没有指定,这将不起作用:
df.index.freq
@sweetdream 提到了 infer_freq 解决方案,这导致我再次对 Pandas 感到惊讶,它通过查看索引来推断频率。但有时它不起作用,还有另一种查找方式。
两者都应该有效:
text_freq_of_hourly_data_infer_freq = pd.infer_freq(df.index)
text_freq_of_hourly_data_inferred_freq = df.index.inferred_freq
它们都应该返回 'H'
,但如果数据框未排序,则推断将失败,并将返回 None
,如文档中所述。所以你应该对索引进行排序。
并且不要忘记给它“索引”,而不是数据框,如果在索引中指定了它,它可以从列而不是索引中推断出来。
<块引用>如果传递,则系列将使用系列的值(不是索引)。
参考文献: