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

DataFrame中使用try-except仅替换错误单元格而非整行的实现问题

问题原因

你当前将整行所有指标的计算逻辑放在同一个try代码块中,任意一个指标计算触发KeyError或TypeError时,都会直接触发异常分支将整行赋值为Error,无法实现单个错误单元格替换的需求。另外你当前的异常捕获只覆盖了KeyError,遗漏了可能触发的TypeError甚至除零错误。

解决方案

可以封装一个独立的安全计算函数,对每个指标的计算单独做异常捕获,单个指标计算出错时仅返回Error,不影响其他指标的正常计算。
修改后的代码参考:

# 定义安全计算函数,捕获异常时返回Error
def safe_calc(func, default="Error"):
    try:
        return func()
    except (KeyError, TypeError, ZeroDivisionError):
        # 可根据实际需求调整需要捕获的异常类型
        return default

# 逐个计算每个指标,每个指标独立捕获异常
row_data = [
    stock,
    safe_calc(lambda: beta),
    safe_calc(lambda: dividendYield),
    safe_calc(lambda: (sharesOutstanding*close_price_num)/1000000000),
    safe_calc(lambda: '{:.2f}'.format(close_price_num)),
    safe_calc(lambda: (close_price_num/earnings/1000)),
    safe_calc(lambda: (EV/(final_df.at['Total Revenue', 'ttm'])/1000)),
    safe_calc(lambda: close_price_num/EE),
    safe_calc(lambda: EV/RE),
    safe_calc(lambda: float('{:.1f}'.format((RE/(final_df.at['Total Revenue', 'last year']*1000) - 1)*100))),
    safe_calc(lambda: EV/final_df.at['Normalized EBITDA', 'ttm']/1000),
    safe_calc(lambda: EV/1000000000),
    safe_calc(lambda: '{:.1f}'.format((FCF/(final_df.at['Total Revenue', 'ttm'])/10))),
    safe_calc(lambda: '{:.1f}'.format(final_df.at['Normalized EBITDA', 'ttm']/final_df.at['Total Revenue', 'ttm']*100)),
    safe_calc(lambda: (EV/(final_df.at['Normalized EBITDA', 'last year'] * (1 + (RE/(final_df.at['Total Revenue', 'last year']) - 1))))),
    '-'
]

# 把构造好的行数据写入DataFrame
Ratio_df.loc[stock] = row_data

内容的提问来源于stack exchange,提问作者Kevin John Abouzeid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:06:03