fix(data_processor.py): 修复气压 NaN 值未填充导致验证失败的问题
calculate_pressure() 函数: - 原逻辑:只在 max_samples 截断模式下用平均值填充剩余行的 NaN 气压值, 正常全量计算时若某些高度档位 API 失败(返回 None),NaN 直接传播至数据验证器, 触发 'Column pressure contains NaN values' ValueError,导致任务失败 - 修复:将 NaN 填充逻辑从条件分支中提取为通用处理, 任何时候只要有有效气压值就用其平均值填充所有 NaN 行, 并在统计信息中明确报告填充行数 影响范围:消除因 Open-Meteo API 波动导致的整任务失败
This commit is contained in:
@ -544,17 +544,17 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s
|
||||
df['pressure'] = None # 初始化
|
||||
df.loc[sample_df.index, 'pressure'] = pressures
|
||||
|
||||
# 对于未计算的行,使用插值或平均值填充
|
||||
if max_samples is not None and len(df) > max_samples:
|
||||
# 只计算了部分行,用平均值填充其余行
|
||||
valid_pressures_for_mean = [p for p in pressures if p is not None]
|
||||
if valid_pressures_for_mean:
|
||||
mean_pressure = sum(valid_pressures_for_mean) / len(valid_pressures_for_mean)
|
||||
df['pressure'] = df['pressure'].fillna(mean_pressure)
|
||||
print(f"使用平均气压填充其余 {len(df) - max_samples} 行: {mean_pressure:.1f} hPa")
|
||||
# 统计并填充缺失气压值:用已有有效值的平均值填充所有NaN
|
||||
valid_pressures = [p for p in pressures if p is not None]
|
||||
nan_count_before = df['pressure'].isna().sum()
|
||||
|
||||
if valid_pressures:
|
||||
mean_pressure = sum(valid_pressures) / len(valid_pressures)
|
||||
df['pressure'] = df['pressure'].fillna(mean_pressure)
|
||||
if nan_count_before > 0:
|
||||
print(f"使用平均气压 {mean_pressure:.1f} hPa 填充了 {nan_count_before} 行缺失气压值")
|
||||
|
||||
# 统计信息
|
||||
valid_pressures = [p for p in pressures if p is not None]
|
||||
if valid_pressures:
|
||||
avg_pressure = sum(valid_pressures) / len(valid_pressures)
|
||||
print(f"成功计算 {len(valid_pressures)}/{actual_samples} 个气压值,平均值: {avg_pressure:.1f} hPa")
|
||||
|
||||
Reference in New Issue
Block a user