2017-08-02 4 views
0

私は1500行と2000列のnetCDFファイルを持っています。それらの中には、異なる場所のデータに矛盾が含まれているものはほとんどありません。このような矛盾をNoData値で更新したいと思います。私が研究している間、変数の値をある閾値よりも上または下に更新したいと思っている多くの答えが見つかりました。例えば:以来netCDFファイルの一部を更新するには?

#------ Research----- 

dset['var'][:][dset['var'][:] < 0] = -1 

#----------------- 

Python : Replacing Values in netcdf file using netCDF4

、不整合の値は以下に基づいて不整合を更新する、データ値と一致/一定の閾値を超えることができません。

私のアプローチ1:

ncfile = r'C:\\abcd\\55618_12.nc' 
variableName = 'MAX' 

fh = Dataset(ncfile, mode='r+') 

for i in range(500,600,1): 
    for j in range(200,300,1): 
     fh.variables[variableName][i][j] = -99900.0 # NoData value 
     #--- or 
     #fh.variables[variableName][i:j] = -99900.0 

fh.close()

アプローチ2:

fh = Dataset(ncfile, mode='r') 
val = fh.variables[variableName] 

for i in range(500,600,1): 
    for j in range(200,300,1): 
     val[i][j] = -99900.0 

fh = Dataset(ncfile, mode='w') #(ncfile, mode='a')(ncfile, mode='r+') 
fh.variables[variableName] = val 
fh.close() 

結果: スクリプトが正常に処理を完了します。ただし、.ncファイルを更新しないでください。

フレンド、あなたのご協力をよろしくお願い申し上げます。アプローチに続き

答えて

0

は私のために働いた:

import netCDF4 as nc 
import numpy as np 

ncfile = r'C:\\abcd\\55618_12.nc' 
variableName = 'MAX' 

fh = nc.Dataset(ncfile, mode='r') 
val = fh.variables[variableName][:] 
fh.close() 

print type (val) 

for i in range(500,600,1): 
    for j in range(200,300,1): 
     #print i,j 
     val[i][j] = -99900.0 
     if val[i][j]> -99900.0: 
      print val[i][j] 


fh = nc.Dataset(ncfile, mode='r+') 
fh.variables[variableName][:]= val 
fh.close() 
+0

質問は少し不明です。塗りつぶし値に 'i = 500:600、j = 200:300'の範囲を常に設定したいですか?その場合、単に 'val [500:600,200:300] = -99900.0'を使用してください(ダブルループはありません)。そして、ファイルを 'r +'として直接開くと、2回開く必要はありません。 – Bart

+0

応答が遅れて申し訳ありません。範囲は、ファイルごとに変わります。提供された情報が役立ちます。特にr +モード情報。ありがとう。 –

1

は、緯度/経度グリッド上のデータか?もしそうなら、CDOを使用してコマンドラインからそれを行うことを容​​易にすることがあります。

FillValueはあなたのケースで-99900.0のようですあなたの欠損値である
cdo setclonlatbox,FillValue,lon1,lon2,lat1,lat2 infile.nc outfile.nc 

+0

遅れて申し訳ありません。 cdoの情報をありがとう。それは役に立ちます。 –

+0

これで問題が解決した場合は、矢印の下のチェックマークをクリックして答えとして受け入れることができます。 –

関連する問題