Python netcdf - 将指定值转换为 NaN

Python netcdf - convert specified values to NaN

我正在绘制来自卫星和天气模型的风数据的 pcolourmesh。这些值都存储在 netcdf 文件中。下面我尝试用 NaN 替换等于 70 或 0 的值,这不会给出错误但它也不会创建 NaN,nozeros 与原始数据集的大小相同。我查看了数据,它确实有值 ==70 和 0。

 import netCDF4 as nc
import numpy as np
import matplotlib.pyplot as plt
import csv as cs
import pandas as pd

ncfile = nc.Dataset('C:\Users\mmso2\Google Drive\ENVI_I-PAC_2007_10_21_21_22_47.nc')
SARwind = ncfile.variables['sar_wind']
ModelWind = ncfile.variables['model_speed']
LON = ncfile.variables['longitude']
LAT = ncfile.variables['latitude']
LandMask = ncfile.variables['mask']

    #clean the data of values = 70
    SARwind_nan = SARwind

    for i in SARwind_nan:
        if i.any() == 70:
            i = np.nan
        elif i.any()==0:
            i = np.nan 

  nozeros=np.count_nonzero(~np.isnan(SARwind_nan))

另外,我想将 LandMask >=0 的区域转换为 NaN,请问有更好的方法吗?

谢谢

除了缩进语法错误外,您的代码中还有几个问题。

下面的代码将不执行任何操作。什么是 i ?结果没有保存。

for i in SARwind_nan:
        if i.any() == 70:
            i = np.nan
            ...

这里有一个示例,它应该可以满足您的要求。

SARwind = np.array([
  [1,2,0,-4,-5],
  [6,0,70,-9,-15],
  [10,11,-12,70,-14],
  [0,17,70,-19,-20],
  ], dtype=np.float32)

SARwind_nan =  SARwind.copy()
SARwind_nan[SARwind_nan == 0.0] = np.nan
SARwind_nan[SARwind_nan == 70.0] = np.nan

print SARwind_nan

nozeros=np.count_nonzero(~np.isnan(SARwind_nan))
print nozeros