处理KeyError:marketCap列无数据时填充Null并让代码持续运行
解决yahooquery获取股票数据时的KeyError问题
针对你遇到的KeyError: "['marketCap'] not in index"错误,核心原因是部分股票的返回数据中没有marketCap字段,导致DataFrame缺少对应列。下面是修改后的代码,既能自动填充空值,又能保证程序不中断:
import pandas as pd from yahooquery import Ticker symbols = ['MSFT','GOOG','AAPL'] # 替换为你的75000+代码列表 header = ["regularMarketPrice", "marketCap"] for tick in symbols: try: faang = Ticker(tick) price_data = faang.price # 处理无返回数据的情况 if not price_data: df = pd.DataFrame(index=[tick], columns=header) else: df = pd.DataFrame(price_data).T # 强制对齐所需列,缺失列自动填充NaN df = df.reindex(columns=header) # 追加到CSV文件 df.to_csv('output.csv', mode='a', index=True, header=False, columns=header) # 捕获所有异常,避免单个股票出错中断整个循环 except Exception as e: print(f"处理代码 {tick} 时出错: {str(e)}") # 可选:出错时写入空值行,保证数据完整性 error_row = pd.DataFrame([[pd.NA, pd.NA]], index=[tick], columns=header) error_row.to_csv('output.csv', mode='a', index=True, header=False, columns=header)
关键优化点
- 异常捕获:用
try-except包裹单条股票的处理逻辑,某只股票出错时仅打印错误信息,程序继续运行 - 列对齐:使用
reindex(columns=header)确保DataFrame始终包含你需要的列,缺失字段自动填充NaN - 空数据处理:提前检查
price_data是否为空,避免空字典转DataFrame时出现异常 - 可选错误行写入:出错时主动写入空值行,保证输出CSV的行数与股票代码数量对应,方便后续核对
内容的提问来源于stack exchange,提问作者HTMLHelpMe
相关产品推荐
相关产品推荐

