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

Jupyter Notebook中解决温度数据评估的simulations数值类型错误

问题排查与解决方案

核心原因

这个错误的本质是传入NSE函数的模拟温度数组不是纯数值类型,降水数据能正常运行说明脚本逻辑没问题,问题出在温度数据的格式或导入处理上。

具体排查步骤

  • 检查模拟温度数据的内容
    打开CSV文件,手动扫一眼温度列是否存在非数值内容(比如字符串注释、空单元格、NA/-9999这类缺失值标记)。用pandas快速验证:

    import pandas as pd
    sim_df = pd.read_csv('你的模拟温度文件.csv')
    # 查看列类型
    print(sim_df['温度列名'].dtypes)
    # 强制转数值,看是否有NaN生成(NaN对应原数据的非数值项)
    print(pd.to_numeric(sim_df['温度列名'], errors='coerce').isna().sum())
    
  • 修正数据导入的类型指定
    导入CSV时,pandas可能把温度列识别成了object(字符串)类型,直接指定类型避免自动识别错误:

    sim_df = pd.read_csv('你的模拟温度文件.csv', dtype={'温度列名': float}, na_values=['-9999', 'NA', ''])
    

    其中na_values把常见的缺失值标记统一转成NaN,方便后续处理。

  • 清理数据后再传入NSE函数
    调用自定义NSE函数前,先把数据转成纯数值数组并清理缺失值:

    # 提取数值并去掉缺失值
    sim_data = sim_df['温度列名'].dropna().values
    obs_data = obs_df['温度列名'].dropna().values
    # 确保两个数组长度一致(时间序列对齐)
    if len(sim_data) != len(obs_data):
        min_length = min(len(sim_data), len(obs_data))
        sim_data = sim_data[:min_length]
        obs_data = obs_data[:min_length]
    # 调用NSE函数
    nse_result = custom_nse(sim_data, obs_data)
    
  • 检查自定义NSE函数的校验逻辑
    看你自定义的NSE函数里的数值校验代码,比如是否用了np.issubdtype(simulations.dtype, np.number)这类判断。如果函数里没做自动转换,就必须确保传入的是纯数值数组,否则触发TypeError。可以在函数开头加一行强制转换:

    def custom_nse(simulations, observations):
        # 强制转数值并清理缺失值
        simulations = pd.to_numeric(simulations, errors='coerce').dropna().values
        observations = pd.to_numeric(observations, errors='coerce').dropna().values
        # 原函数逻辑...
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:51:28