You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决df.to_csv的KeyError问题:为缺失的CashFinancial列写入null

解决DataFrame缺失列导出CSV时的KeyError并填充Null值

问题场景

遍历股票代码调用yahooquery获取季度资产负债表,尝试按指定列导出CSV时,部分股票(如GOOG)缺失CashFinancial列,触发KeyError: ["CashFinancial"] not in index错误,需要为缺失该列的股票自动写入Null值。

解决方案

核心思路是在导出CSV前,确保DataFrame包含所有指定的目标列,对缺失列自动创建并填充Null值。推荐使用reindex方法快速实现,也可通过循环检查列存在性手动添加。

修改后的完整代码

import pandas as pd
from yahooquery import Ticker

symbols = ['AAPL','GOOG','MSFT'] # 实际会用到75,000个代码
header = ["asOfDate","CashAndCashEquivalents","CashFinancial","CurrentAssets","TangibleBookValue","CurrentLiabilities","TotalLiabilitiesNetMinorityInterest"]

for tick in symbols:
    faang = Ticker(tick)
    df = faang.balance_sheet(frequency='q')
    # 确保DataFrame包含所有目标列,缺失列自动填充NaN(对应CSV中的Null)
    df = df.reindex(columns=header)
    # 追加模式导出CSV
    df.to_csv('output.csv', mode='a', index=True, header=False, columns=header)

关键改动说明

  1. 移除冗余调用:删除重复的faang.balance_sheet(frequency='q')调用,直接将结果赋值给df。
  2. 强制对齐列结构:df.reindex(columns=header)会自动完成两个操作:
    • 按header的顺序排列现有列
    • 对header中存在但df中缺失的列(如GOOG的CashFinancial),自动创建该列并填充NaN(导出到CSV时显示为空白/Null)
  3. 避免KeyError:经过reindex处理后,df必然包含header中的所有列,调用to_csv指定columns=header时不会再触发KeyError。

替代实现(手动检查列)

如果需要更直观的列处理逻辑,也可以通过循环手动添加缺失列:

# 替换reindex的代码块
for col in header:
    if col not in df.columns:
        df[col] = pd.NA  # pd.NA更适配pandas的nullable类型

内容的提问来源于stack exchange,提问作者HTMLHelpMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:25:19