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

如何在Pandas DataFrame中按条件替换NaN值并修复异常?

问题分析与解决方案

咱们先来拆解下你代码里触发except块的核心问题:

  • 布尔Series不能直接作为if判断条件:q_data.change == 0.00会返回一个由布尔值组成的Series(每行对应True/False),但if语句需要单个布尔结果,直接这么写会触发ValueError,这就是代码跳去异常块的主要原因。
  • 逻辑不符合需求:你要的是替换open/high/low里的NaN值,原代码却直接把整列都改成close值,范围太宽泛了。
  • 语法细节问题:如果是Python3环境,print "No data"需要改成print("No data"),不然也会触发语法错误。

下面是修正后的完整代码,完美匹配你的需求:

import pandas as pd

try:
    url = 'https://api.iextrading.com/1.0/stock/AAME/chart/1y'
    q_data = pd.read_json(url)
    
    # 先锁定change值为0.00的行,生成布尔索引
    target_rows = q_data['change'] == 0.00
    
    # 针对目标行,只把open/high/low中的NaN值替换为对应行的close值
    q_data.loc[target_rows, ['open', 'high', 'low']] = q_data.loc[target_rows, ['open', 'high', 'low']].fillna(
        q_data.loc[target_rows, 'close'], axis=0
    )
    
except Exception as e:
    print(f"No data, error details: {e}")  # 打印错误信息方便排查
    # 只有当这段代码在循环内时,continue才有用,否则可删除
    # continue

关键细节说明:

  1. 精准定位目标行:用target_rows生成布尔索引,只筛选change为0.00的行,避免影响其他数据。
  2. 按需替换NaN:用fillna方法,仅对目标行里open/high/low的NaN值进行填充,保留非NaN的原有数据。
  3. 调试优化:把Exception改为Exception as e,打印具体错误信息,方便后续排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:45