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
相关产品推荐
相关产品推荐

