Pandas循环拉取雅虎财经数据时Excel工作表数据混杂问题
问题根因
company_metrics字典被定义在循环外层,每次循环都会向这个字典中追加新公司的指标数据,后续调用pd.DataFrame.from_dict(company_metrics)时,会把所有已遍历过的公司数据整体转成DataFrame写入当前工作表,最终导致后生成的工作表包含前面所有公司的累积数据。
修正方法
调整字典的作用域,每次循环单独初始化仅存储当前公司指标的字典,生成DataFrame时仅传入当前公司的单份数据,避免跨公司数据累积。修正后的完整代码如下:
import pandas as pd import yfinance as yf import datetime import time companies = ['AAPL', 'MSFT', 'AMZN', 'PYPL'] xlwriter = pd.ExcelWriter('marketcap.xlsx', engine='openpyxl') for company in companies: # 单公司指标字典在循环内初始化,每次循环重置,不累积历史数据 company_metrics = {} company_info = yf.Ticker(company) company_metrics['Market Cap'] = company_info.info['marketCap'] # 仅转换当前公司数据为DataFrame df = pd.DataFrame([company_metrics]) # 写入对应公司命名的独立工作表 df.to_excel(xlwriter, sheet_name=company, index=False) xlwriter.save()
说明:如果后续需要给单个公司新增其他财务指标,直接在循环内的
company_metrics字典中添加对应键值对即可,不会出现数据串到其他工作表的问题。如果拉取数据时遇到请求频率限制,可以在循环末尾加time.sleep(1)设置1秒请求间隔,避免被Yahoo Finance拦截。
内容的提问来源于stack exchange,提问作者Honest Abe
相关产品推荐
相关产品推荐

