NetCDF get_dims太多值无法解压缩

问题描述

我正在使用NetCDF文件(.nc)-600 + MB。

import netCDF4
from netCDF4 import num2date
import numpy as np
import os
import pandas as pd

# Open netCDF4 file
file_location = '2m dewpoint temperature.nc'
f = netCDF4.Dataset(file_location)

为了将文件转换为CSV,我首先查找其属性

# Find the attributes
print(f.variables.keys())

Output: dict_keys(['longitude','latitude','expver','time','d2m'])

然后,提取变量并尝试获取尺寸

# Extract variable
d2m = f.variables['d2m']
 
# Get dimensions
time_dim,lat_dim,lon_dim = d2m.get_dims()
time_var = f.variables[time_dim.name]
times = num2date(time_var[:],time_var.units)
latitudes = f.variables[lat_dim.name][:]
longitudes = f.variables[lon_dim.name][:]

我遇到以下错误

time_dim,lat_dim,lon_dim = d2m.get_dims()
ValueError:太多值无法解包(预期3)

这里发生了什么,我应该如何解决


编辑1

print(d2m.get_dims())输出

(<class 'netCDF4._netCDF4.Dimension'>: name = 'time',size = 94750,<class 'netCDF4._netCDF4.Dimension'>: name = 'expver',size = 2,<class 'netCDF4._netCDF4.Dimension'>: name = 'latitude',size = 33,<class 'netCDF4._netCDF4.Dimension'>: name = 'longitude',size = 53)

编辑2

df.head() for @RobertWilson's suggestion

enter image description here

解决方法

您似乎有3个以上的尺寸。结果,这将失败:

time_dim,lat_dim,lon_dim = d2m.get_dims()

您只需要检查d2m.get_dims()给您的内容,然后修改该行即可。

一种更快的转换为csv的方法是使用xarray:

import xarray as xr
import pandas as pd
ds = xr.open_dataset(file_location)
df = ds.to_dataframe().reset_index()
# subset the dataframe etc.    
df.to_csv(filename,index=False)
,

@user2856 said一样,我得到了元组拆包代码期望的暗淡数量。

为了得到适量的暗淡,我跑了

print(d2m.get_dims())

输出为

(<class 'netCDF4._netCDF4.Dimension'>: name = 'time',size = 94750,<class 'netCDF4._netCDF4.Dimension'>: name = 'expver',size = 2,<class 'netCDF4._netCDF4.Dimension'>: name = 'latitude',size = 33,<class 'netCDF4._netCDF4.Dimension'>: name = 'longitude',size = 53)

因此,我刚刚调整了错误所在的行

time_dim,expver_dim,lon_dim = d2m.get_dims()

然后一切运行顺利,包括转换为.CSV。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...