如何在 python 中创建 netCDF 文件时循环写入变量

How to write variables in a loop while creating netCDF file in python

我在一个.csv文件中有200多个时间序列变量,想把所有变量都写到一个netCDF文件中。但我不知道为什么我不能循环执行此操作。带有伪数据的代码如下:

数据生成

vars = ['one', 'two', 'three', 'four']
date = pd.date_range(start='2021-01-01', end='2021-01-12')
data_dict = {k: np.random.rand(12) for k in vars}
data = pd.DataFrame(data_dict, index=date)

创建具有维度的 netcdf 文件

try:
    # just to be safe, make sure dataset is not already open.
    ncfile.close()
except:
    pass

ncfile = Dataset('test.nc', mode='w', format='NETCDF4_CLASSIC')

lat_dim = ncfile.createDimension('lat', 1)    
lon_dim = ncfile.createDimension('lon', 1)    

time_dim = ncfile.createDimension('time', None) 
time = ncfile.createVariable('time', np.float64, ('time',))
time.units = 'Minutes since 2021-01-01 0'
time.long_name = 'time'
    
calendar = 'standard'
time[:] = date2num(
    (pd.to_datetime(data.index)).to_pydatetime(),
    units=time.units,
    calendar=calendar
)

循环写入netcdf文件

for i, vname in enumerate(var):
    vname = ncfile.createVariable(vname,np.float64,'time')
    vname[:] = data[vname].values

我认为这里的问题是 'vname' 这是一个字符串。我试图将它转换成一个对象,但我做不到。我不确定我是否错了。 任何帮助或建议将不胜感激

使用 xarray 你可以这样写:

import numpy as np
import pandas as pd

variables = ['one', 'two', 'three', 'four']
date = pd.date_range(start='2021-01-01', end='2021-01-12')
data_dict = {k: np.random.rand(12) for k in variables}
data = pd.DataFrame(data_dict, index=date)
data.index.name = 'time'

ds = data.to_xarray().expand_dims(dim=['lat', 'lon'])
ds.to_netcdf('test.nc', format='NETCDF4')

to_xarray 方法会给你一个 xarray.Datasettime 作为坐标和你的四个变量。 expand_dims 添加两个空间维度。

告诉我生成的 dataset/netcdf 是否如您所愿。