【问题标题】:Python netcdf - convert specified values to NaNPython netcdf - 将指定值转换为 NaN
【发布时间】:2016-07-26 22:51:00
【问题描述】:

我正在绘制来自卫星和天气模型的风数据的 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,有更好的方法吗?

谢谢

【问题讨论】:

    标签: python python-2.7 nan netcdf


    【解决方案1】:

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

    下面的代码什么都不做。 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
    

    【讨论】:

    • 感谢 cmets。我已经设置了SARwind_nan = SARwind[:].copy(),因为值来自 netCDF 文件,它似乎可以工作。
    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 2019-09-20
    • 1970-01-01
    • 2011-07-04
    • 2013-03-04
    • 2014-05-20
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多