Python新手求助:如何用pandas-datareader 0.8调用Alpha Vantage数据
解决pandas-datareader 0.8中Alpha Vantage API密钥的使用问题
我来帮你搞定这个问题,你的代码里有两个关键误区,我一步步给你拆解清楚:
错误原因分析
os.getenv()用法错误:你写的os.getenv('ABC123')是试图读取名为ABC123的系统环境变量,而不是直接把密钥字符串传给API——这根本拿不到你的密钥。- DataReader参数不匹配:pandas-datareader 0.8版本中,
DataReader并不接受直接传入api_key这个关键字参数,这就是你报错的直接原因。
正确的解决方案
方案一:通过环境变量配置(推荐)
这种方式更安全,避免把密钥硬编码到代码里:
- 设置环境变量:
- Windows命令行:
set ALPHAVANTAGE_API_KEY=ABC123 - Linux/macOS终端:
export ALPHAVANTAGE_API_KEY=ABC123
- Windows命令行:
- 编写代码:
from datetime import datetime import pandas_datareader.data as web # DataReader会自动读取环境变量中的ALPHAVANTAGE_API_KEY df = web.DataReader("AAPL", "av-daily", start=datetime(2017, 2, 9), end=datetime(2017, 5, 24)) print(df)
方案二:使用专门的get_data_av函数
pandas-datareader提供了针对Alpha Vantage的专用函数,支持直接传入api_key:
from datetime import datetime import pandas_datareader.data as web df = web.get_data_av("AAPL", api_key="ABC123", start=datetime(2017, 2, 9), end=datetime(2017, 5, 24)) print(df)
方案三:通过params参数传递密钥(兼容DataReader)
如果你坚持要用DataReader,可以把密钥放在params字典中传递:
from datetime import datetime import pandas_datareader.data as web df = web.DataReader( "AAPL", "av-daily", start=datetime(2017, 2, 9), end=datetime(2017, 5, 24), params={'apikey': 'ABC123'} ) print(df)
内容的提问来源于stack exchange,提问作者Max Cheung
相关产品推荐
相关产品推荐

