From 3e3a532ad61637dacb4eff4844cbe3f285aa1739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=BD=E8=B1=86=E5=AD=90?= Date: Thu, 28 May 2026 22:23:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9read=5Fmicaps=5F1=E8=A7=A3?= =?UTF-8?q?=E7=A0=813=E4=BD=8D=E6=95=B0=E6=B5=B7=E5=B9=B3=E9=9D=A2?= =?UTF-8?q?=E6=B0=94=E5=8E=8Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原来解码3位数海平面气压的代码不对, 假设:MSLP = 132 第一行执行: 132 <= 600 132 / 10 + 1000 = 1013.2 然后第二行重新判断: data['MSLP'] > 600 现在 1013.2 > 600 成立,所以它又会被第二行处理一次: 1013.2 / 10 + 900 = 1001.32 结果本来应该是 1013.2 hPa,却变成了 1001.32 hPa。 所以这段代码会把原本小于等于 600 的气压值二次转换 --- nmc_met_io/read_micaps.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nmc_met_io/read_micaps.py b/nmc_met_io/read_micaps.py index 750a618..2e372d5 100644 --- a/nmc_met_io/read_micaps.py +++ b/nmc_met_io/read_micaps.py @@ -116,8 +116,15 @@ def read_micaps_1(fname, limit=None): return None # decode the sea leavl pressure - data.loc[data['MSLP'] <= 600, 'MSLP'] = data.loc[data['MSLP'] <= 600, 'MSLP']/10. + 1000. - data.loc[data['MSLP'] > 600, 'MSLP'] = data.loc[data['MSLP'] > 600, 'MSLP']/10. + 900. + + # data.loc[data['MSLP'] <= 600, 'MSLP'] = data.loc[data['MSLP'] <= 600, 'MSLP']/10. + 1000. + # data.loc[data['MSLP'] > 600, 'MSLP'] = data.loc[data['MSLP'] > 600, 'MSLP']/10. + 900. + + valid_mslp = data["MSLP"].notna() + low_mask = valid_mslp & (data["MSLP"] <= 600) + high_mask = valid_mslp & (data["MSLP"] > 600) + data.loc[low_mask, "MSLP"] = data.loc[low_mask, "MSLP"] / 10.0 + 1000.0 + data.loc[high_mask, "MSLP"] = data.loc[high_mask, "MSLP"] / 10.0 + 900.0 # add time data['time'] = time