簡體   English   中英

如何從 Excel 工作表創建 netcdf 文件,其中包含一個具有相應經緯度的變量值?

[英]How to create netcdf file from excel sheet contain one variable values with corresponding lat long?

我正在嘗試從包含三列(lat、long 和 Precipitation)中的值的 excel 文件創建一個 nc 文件。 數據為0.05度分辨率的網格值。 網格總數為 1694。數據范圍為 57 列和 52 行。 我不知道如何加載降水變量?。

我是這樣試的。

from netCDF4 import *
from numpy import *
from openpyxl import *
import time

#Load the data sheet
wb = load_workbook('D:\\R_Workspace\\UB_Try.xlsx')
ws = wb['UB_details']

#To get the prec variable
ppt = []
for i in range(2,1696):
   ppt.append(ws.cell(row=i,column=3).value)
ppt_arr = asarray(ppt)

#Writing nc file
nc_file = Dataset('D:\\R_Workspace\\Test.nc','w',format='NETCDF4_CLASSIC')
nc_file.description = 'Example dataset'
nc_file.history = 'Created on ' +time.ctime(time.time())

#Defining dimensions
lon = nc_file.createDimension('lon',57)
lat = nc_file.createDimension('lat',52)

#Creating variables
latitude = nc_file.createVariable('Latitude',float32,('lat',))
latitude.units = 'Degree_North'
longitude = nc_file.createVariable('Longitude',float32,('lon',))
longitude.units = 'degree_East'
prec = nc_file.createVariable('prec',float32,('lon','lat'),fill_value = -9999.0)
prec.units = 'mm'

#Writing data to variables
lats = arange(16.875,19.425,0.05)
lat_reverse = lats[::-1]
lons = arange(73.325,76.175,0.05)
latitude[:] = lat_reverse
longitude[:] = lons
prec[:] = ppt_arr
nc_file.close()

我得到了錯誤

Traceback (most recent call last):
  File "D:\R_Workspace\Try.py", line 45, in <module>
    prec[:] = ppt_arr
  File "netCDF4\_netCDF4.pyx", line 4358, in netCDF4._netCDF4.Variable.__setitem__
ValueError: cannot reshape array of size 1694 into shape (57,52)

替換這一行:

prec[:] = ppt_arr

和:

temp = np.zeros(52 * 57, dtype=np.float32)
temp[:ppt_arr.size] = ppt_arr
prec[:] = temp

這將創建一個臨時零數組,並在分配給 netCDF 數組之前用您的pt_arr值填充有效元素的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM