You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:Quandl时间序列DataFrame无法自动推断频率问题

解决Quandl数据集无法推断/查看时间频率的问题

Hey there, let's break down why you're not getting a frequency result from pd.infer_freq() or df.index.freq, and how to fix it:

问题原因

Quandl的股票类数据集(比如你用的WIKI/SLB)是交易日数据,不是连续的日历日——它会跳过周末、节假日,导致时间序列存在间隔。这就触发了两个关键点:

  • pd.infer_freq() 需要连续、规律的时间间隔才能推断频率,一旦有缺失的日期(比如周末),它无法确定统一的频率,所以返回None
  • df.index.freq 只有当你的DatetimeIndex由固定频率规则生成的(比如用pd.date_range()创建,或者resample后的结果)才会有值。从Quandl获取的原始索引是基于实际交易日期的集合,没有预设的频率属性,所以也返回None

解决方案

既然你已经知道数据是日度(交易日)频率,这里有两种实用方法:

1. 手动标记频率(最简单)

直接给索引设置工作日频率('B'代表Business Day,符合股票交易日规则),之后就能正常查看频率了:

# 手动设置工作日频率
df.index.freq = 'B'

# 打印查看频率
print("数据集的时间频率:", df.index.freq)

2. 生成连续的固定频率索引(如果需要补全缺失日期)

如果需要让索引变成连续的工作日序列(填充缺失日期的NaN值),可以用reindex方法:

# 生成从数据起始到结束的连续工作日索引
continuous_idx = pd.date_range(start=df.index.min(), end=df.index.max(), freq='B')

# 重新索引,缺失日期会填充NaN(可根据需求用ffill/bfill填充数据)
df_continuous = df.reindex(continuous_idx)

# 现在查看频率会直接返回<BDay>
print("连续数据集的时间频率:", df_continuous.index.freq)

3. 验证实际时间间隔(可选)

如果你想确认数据的实际时间间隔统计,可以用这个代码:

# 计算相邻日期的间隔,然后取平均值
avg_interval = df.index.to_series().diff().mean()
print("数据的平均时间间隔:", avg_interval)

这样就能轻松查看和标记你的数据集频率啦!

内容的提问来源于stack exchange,提问作者a_jelly_fish

火山引擎 最新活动