freeCodeCamp Python算法交易课程:打印DataFrame重复内容求助
解决DataFrame输出重复内容的问题
看起来你在freeCodeCamp的算法交易课程里遇到了DataFrame输出重复的问题,我来帮你分析一下可能的原因和解决办法:
可能的问题原因
- Ticker列表存在重复值:你的
stocks['Ticker'][:5]里可能包含重复的股票代码,导致循环中重复添加了相同的股票数据到DataFrame中。可以先打印这个切片确认:print(stocks['Ticker'][:5]) - 低效的
append()用法:虽然append()在旧版pandas中可以运行,但它每次都会返回一个新的DataFrame,循环中反复调用不仅效率低,也容易因为意外重复执行(比如交互式环境中多次运行代码块)导致重复内容。
修复方案
推荐你改用先收集数据到列表,再一次性生成DataFrame的方式,这既符合现代pandas的最佳实践(append()已在pandas 2.0+中被弃用),也能从根源避免重复添加的问题:
import numpy as np import pandas as pd import requests import xlsxwriter import math # 读取股票列表 stocks = pd.read_csv(r'XXXXXXXXXXXXXXXXXXXXXXX.csv') from secret import IEX_CLOUD_API_TOKEN my_columns = ['Ticker','Stock Price','Market Capitalisation','Number of Shares to Buy'] # 先创建空列表存储每行数据 data_rows = [] # 遍历前5个去重后的Ticker for stock in stocks['Ticker'][:5].drop_duplicates(): api_url = f'https://sandbox.iexapis.com/stable/stock/{stock}/quote?token={IEX_CLOUD_API_TOKEN}' data = requests.get(api_url).json() # 将单条股票数据加入列表 data_rows.append([ stock, data['latestPrice'], data['marketCap'], 'N/A' ]) # 一次性生成最终DataFrame final_dataframe = pd.DataFrame(data_rows, columns=my_columns) print(final_dataframe)
额外优化建议
- 全局去重:如果你的股票列表本身存在大量重复Ticker,建议先对整个列表去重,避免不必要的API请求:
unique_tickers = stocks['Ticker'].drop_duplicates() for stock in unique_tickers[:5]: # 后续代码不变 - 错误处理:添加
try-except块处理API请求失败的情况,避免单只股票出错导致整个循环中断:for stock in unique_tickers[:5]: try: api_url = f'https://sandbox.iexapis.com/stable/stock/{stock}/quote?token={IEX_CLOUD_API_TOKEN}' data = requests.get(api_url).json() data_rows.append([stock, data['latestPrice'], data['marketCap'], 'N/A']) except Exception as e: print(f"获取{stock}数据失败: {e}")
这样修改后,你应该能得到和课程示例一致的正确输出了。
内容的提问来源于stack exchange,提问作者SpicyCoral
相关产品推荐
相关产品推荐

