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:
DXC
2026-07-10 14:48:35 +08:00
parent b7e389c3d7
commit e16bd2976f

View File

@ -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")