Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从excel工作表创建netcdf文件,该工作表包含一个具有相应lat long的变量值?_Python_Netcdf4 - Fatal编程技术网

Python 如何从excel工作表创建netcdf文件,该工作表包含一个具有相应lat long的变量值?

Python 如何从excel工作表创建netcdf文件,该工作表包含一个具有相应lat long的变量值?,python,netcdf4,Python,Netcdf4,我试图从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

我试图从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)
回溯(最近一次呼叫最后一次):
文件“D:\R\u Workspace\Try.py”,第45行,在
prec[:]=ppt\u arr
netCDF4.\u netCDF4.Variable.\u setitem中第4358行的文件“netCDF4\\u netCDF4.pyx”__
ValueError:无法将大小为1694的数组重塑为形状(57,52)
替换此行:

prec[:] = ppt_arr
与:


这将创建一个临时零数组,并在分配给netCDF数组之前,用您的值填充有效元素的数量。

请指定它不工作。显示回溯(如果有)或错误的输出等,即提供一个。谢谢@MikeMüller我在查询中提到了回溯。实际上,我的excel工作表有三列1964行,不包括页眉。网格总数为1694。数据范围为57列52行。但是:
57*52=2964
Yes@MikeMüller。实际上它是一个空间数据,只有1694个网格有一个值。剩余数量data@MikeMüller我只是用你的行替换,但是先生,那是在写所有的零值。你确定你也添加了行
temp[:ppt_arr.size]=ppt_arr
?你检查了
ppt_arr
的内容吗?它在写值,但当我绘制输出时是错误的。实际上,栅格的空间分辨率为0.05度。它正在显示1。我的坐标增量是0.05,可能是由于
np.float32
。请看我的最新答案。仍然没有,先生。。我觉得空间参照有问题。这里我指的是坐标,那么如何给出呢?有什么想法吗
temp = np.zeros(52 * 57, dtype=np.float32)
temp[:ppt_arr.size] = ppt_arr
prec[:] = temp