Skip to content

修改read_micaps_1解码3位数海平面气压bug#55

Open
LuckyBoy314 wants to merge 1 commit into
nmcdev:masterfrom
LuckyBoy314:patch-1
Open

修改read_micaps_1解码3位数海平面气压bug#55
LuckyBoy314 wants to merge 1 commit into
nmcdev:masterfrom
LuckyBoy314:patch-1

Conversation

@LuckyBoy314
Copy link
Copy Markdown

原来解码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 的气压值二次转换

正确写法是先基于原始数据生成两个布尔掩码

low_mask = data["MSLP"] <= 600
high_mask = 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

这样第二行判断用的是修改前的分类结果,不会受到第一行赋值影响。

还要考虑缺测值和 NaN

如果前面已经执行了:

data["MSLP"] = data["MSLP"].mask(data["MSLP"] == 9999.0)

那么 MSLP 中可能有 NaN。一般来说:
NaN <= 600
NaN > 600
都会返回 False,不会被转换。

正确的版本

valid_mask = data["MSLP"].notna()
low_mask = valid_mask & (data["MSLP"] <= 600)
high_mask = valid_mask & (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

原来解码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 的气压值二次转换
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant