freeCodeCamp Python算法交易课程:打印结果不符问题求助
问题排查与解决方案
下午好!我帮你分析下这段代码可能存在的问题,以及对应的修复方案:
1. 核心问题:弃用的append()方法
从Pandas 2.0版本开始,DataFrame.append()和Series.append()已经被正式弃用了。你在循环里反复调用append(),不仅会触发警告,还可能因为方法的行为变化导致数据拼接异常,最终输出结果不符合预期。而且这种循环拼接的方式效率极低,数据量稍大就会变慢。
2. 潜在的API数据问题
另外还要确认两个点:
- 你CSV里的前5个股票代码是IEX Cloud沙箱环境支持的有效代码吗?无效代码会导致API返回错误数据或者空值
- 可以在循环里临时打印
print(data),检查返回的JSON结构里是否确实存在latestPrice和marketCap字段——沙箱环境的返回字段偶尔会和正式环境有细微差异
3. 修复后的代码示例
我把代码改成了更稳定高效的写法,同时增加了异常处理来排查问题:
import numpy as np import pandas as pd import requests import xlsxwriter import math from secret import IEX_CLOUD_API_TOKEN # 读取股票列表 stocks = pd.read_csv(r'XXXXXXXXXXXXXXXXXXXXXXX.csv') my_columns = ['Ticker', 'Stock Price', 'Market Capitalisation', 'Number of Shares to Buy'] # 用列表收集每一行数据,避免循环append的问题 data_rows = [] for stock in stocks['Ticker'][:5]: api_url = f'https://sandbox.iexapis.com/stable/stock/{stock}/quote?token={IEX_CLOUD_API_TOKEN}' try: # 发送请求并检查HTTP错误 response = requests.get(api_url) response.raise_for_status() data = response.json() # 确保必要字段存在再添加数据 if 'latestPrice' in data and 'marketCap' in data: data_rows.append([ stock, data['latestPrice'], data['marketCap'], 'N/A' ]) else: print(f"⚠️ 股票 {stock} 的API返回缺少必要字段,请检查") except Exception as e: print(f"❌ 获取股票 {stock} 数据失败:{str(e)}") # 一次性生成最终DataFrame final_dataframe = pd.DataFrame(data_rows, columns=my_columns) print(final_dataframe)
4. 补充:如果「购买数量」需要计算
如果你练习里的目标结果中,Number of Shares to Buy不是N/A而是计算出来的数值,那你需要添加对应的计算逻辑。比如假设你总投资金额是10000美元,可以在生成DataFrame后加上这段代码:
# 总投资金额 portfolio_size = 10000 # 每只股票的分配金额 position_size = portfolio_size / len(final_dataframe) # 计算购买数量(向下取整) final_dataframe['Number of Shares to Buy'] = final_dataframe.apply( lambda row: math.floor(position_size / row['Stock Price']), axis=1 )
内容的提问来源于stack exchange,提问作者SpicyCoral
相关产品推荐
相关产品推荐

