【问题标题】:Read values from a NetCDF file and write them to a csv file从 NetCDF 文件读取值并将它们写入 csv 文件
【发布时间】:2015-06-26 22:27:30
【问题描述】:

我有一个包含此信息的 NetCDF 文件:

尺寸:

lon = 238;
lat = 132;
dep = 38;
time = 8;

变量:

float lon(lon=238);
float lat(lat=132);
float dep(dep=38);
double time(time=8);
float eastward_sea_water_velocity(time=8, dep=38, lat=132, lon=238);
float northward_sea_water_velocity(time=8, dep=38, lat=132, lon=238);

我想读取 lon、lat、eastward_sea_water_velocity 和 northward_sea_water_velocity,并将值写入 csv 文件。

所以 csv 文件会是这样的:

Lon Lat E-Vel N-Vel

28.4511 41.8866 -3.7 -6.3

到目前为止,我只成功读取了 lon 和 lat,并将它们写入 csv:

x,y = ncfile.variables['lon'], ncfile.variables['lat']
import csv
with open('text2.csv', 'w') as f:
    writer = csv.writer(f, delimiter='\t')
    header = ['Longitude', 'Latitude']
    writer.writerow(header)
    writer.writerows(zip(x,y))

f.close()

当我尝试使用以下代码打印“eastward_sea_water_velocity”中的值时:

temp = ncfile.variables['eastward_sea_water_velocity']
print temp

我的输出是:

<type 'netCDF4.Variable'>
float32 eastward_sea_water_velocity(time, dep, lat, lon)
_FillValue: -999.0
missing_value: -999.0
units: m s-1
long_name: u-component of current
standard_name: eastward_sea_water_velocity
scale_factor: 0.01
add_offset: 0.0
source: MHI NASU Hydrodinamical model version V2
valid_min: -5.0
valid_max: 5.0
unlimited dimensions: 
current shape = (8, 38, 132, 238)

那么,如何从变量 'eastward_sea_water_velocity' 中读取值?

提前非常感谢您!万事如意!

【问题讨论】:

  • 向我们展示您用于生成此输出的代码,否则我们无法为您调试。

标签: python csv netcdf


【解决方案1】:

使用print temp[:]或取决于变量print temp[:,:,:,:]的形状

【讨论】:

    【解决方案2】:

    当我尝试用这个打印时:

    print temp[:,:,:,:]
    

    输出是:

    [[[[-- -- -- ..., -- -- --]
    [-- -- -- ..., -- -- --]
    [-- -- -- ..., -- -- --]
    ..., 
    [-- -- -- ..., -- -- --]
    [-- -- -- ..., -- -- --]
    [-- -- -- ..., -- -- --]]
    

    但是,我确信变量有值,因为我用 Panoply 打开文件,我看到了值。

    P.S.:也许Jules0080 来自This post,可以帮助我

    【讨论】:

      【解决方案3】:

      经度和纬度是一维变量,表示代表多维数据的 x 轴和 y 轴的水平坐标。 zip() 所做的是从每个列表中获取成对的项目,因此即使您从该语句中获得了输出,它也没有写入文件中所有可能的 lon、lat 对。由于eastward_sea_water_velocity是4维的,问题就更大了。为简单起见,我们假设您只需要此数据在固定时间和深度的 2D 切片:

      lon = ncfile.variables['lon']
      lat = ncfile.variables['lat']
      # Grab 2D slice for time index 0 and depth index 0
      u = ncfile.variables['eastward_sea_water_velocity'][0, 0]
      import csv
      import numpy as np
      with open('text2.csv', 'w') as f:
          writer = csv.writer(f, delimiter='\t')
          writer.writerow(['Longitude', 'Latitude', 'E-Vel'])
          for inds,val in np.ndenumerate(u):
            writer.writerow([lon[inds[0]], lat[inds[1]], val])
      

      【讨论】:

      • 这是正确的做法,但最后一行有一个小错误:你想将 writerow 参数作为列表传递,即[lon[inds[0]], lat[inds[1]], val]。
      • 已修复,谢谢。 (这就是为什么我不应该在文本字段中编写代码。)
      猜你喜欢
      • 2015-05-23
      • 2015-04-09
      • 1970-01-01
      • 2021-01-11
      • 2020-10-14
      • 2020-10-01
      • 2012-07-25
      • 1970-01-01
      • 2016-07-09
      相关资源
      最近更新 更多