You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在时间序列或DataFrame中筛选日期范围

解决Alpha Vantage日期筛选空DataFrame/报错的问题

嘿,作为Python新手碰到这种问题真的很常见,我帮你拆解下代码里的问题,再给你修正后的方案:

你的代码里的几个关键问题:

  • 变量名错误:你最后用了df.loc[...],但代码里根本没定义df,你实际定义的是data,这会直接抛出NameError。
  • 索引类型不匹配:Alpha Vantage返回的data_daily的索引是字符串格式的日期(比如'2024-05-20'),但你用datetime.date对象去切片,两者类型不兼容,所以会返回空DataFrame。
  • 小细节疏漏:你注释里的data[:'2019-11-29'],当时data还没定义,应该是data_daily。

修正后的完整代码:

import pandas as pd
from alpha_vantage.timeseries import TimeSeries
from datetime import datetime

stock_ticker = 'SPY'
api_key = open('/content/drive/My Drive/Colab Notebooks/key').read()

# 初始化TimeSeries并获取数据
ts = TimeSeries(key=api_key, output_format="pandas")
data_daily, meta_data = ts.get_daily_adjusted(symbol=stock_ticker, outputsize='full')

# 将字符串索引转换为datetime类型(关键步骤!)
data = data_daily.copy()
data.index = pd.to_datetime(data.index)

# 方法1:用字符串日期切片
filtered_data_str = data['2014-01-01':'2015-02-01']

# 方法2:用datetime对象切片
start_date = datetime(year=2014, month=1, day=1)
end_date = datetime(year=2015, month=2, day=1)
filtered_data_dt = data.loc[start_date:end_date]

# 打印结果验证
print("用字符串切片的结果行数:", len(filtered_data_str))
print("用datetime对象切片的结果行数:", len(filtered_data_dt))

关键说明:

  1. 转换索引类型:pd.to_datetime(data.index)把原来的字符串索引转成datetime64类型,这样Pandas才能正确识别日期范围进行切片。
  2. 两种切片方式都有效:转成datetime索引后,不管用字符串日期还是datetime对象切片,都能得到正确的结果。
  3. 避免变量名混淆:全程统一用data或者df,别搞混了,不然容易报错。

你可以运行上面的代码试试,应该就能得到你想要的日期范围数据啦!

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:22:52