From e16bd2976fa820931c27a3eee02d47394cf2ce83 Mon Sep 17 00:00:00 2001 From: DXC Date: Fri, 10 Jul 2026 14:48:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(data=5Fprocessor.py):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B0=94=E5=8E=8B=20NaN=20=E5=80=BC=E6=9C=AA=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E9=AA=8C=E8=AF=81=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit calculate_pressure() 函数: - 原逻辑:只在 max_samples 截断模式下用平均值填充剩余行的 NaN 气压值, 正常全量计算时若某些高度档位 API 失败(返回 None),NaN 直接传播至数据验证器, 触发 'Column pressure contains NaN values' ValueError,导致任务失败 - 修复:将 NaN 填充逻辑从条件分支中提取为通用处理, 任何时候只要有有效气压值就用其平均值填充所有 NaN 行, 并在统计信息中明确报告填充行数 影响范围:消除因 Open-Meteo API 波动导致的整任务失败 --- src/gasflux/data_processor.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/gasflux/data_processor.py b/src/gasflux/data_processor.py index 1a60896..d6a01c1 100644 --- a/src/gasflux/data_processor.py +++ b/src/gasflux/data_processor.py @@ -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")