es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Uniendo archivos NetCDF.

Tengo archivos netcdf descargados entre 2010 y 2021. He intentado combinarlos usando el siguiente código, pero la columna temporal comienza con 01.01.1900 00:00 en lugar de comenzar con 01.01.2010 00:00. ¿Cómo puedo solucionarlo?
“`
import netCDF4
import numpy
import xarray

ds = xarray.open<em>mfdataset('e.*.nc',combine = 'by</em>coords', concat_dim="time")

ds.to<em>netcdf('eras</em>bir.nc')
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de solucionar esto es cambiar las unidades de la variable de tiempo en los archivos netCDF desde el valor predeterminado de “días desde 1900-01-01 00:00:00” a “días desde 2010-01-01 00:00:00”. Esto se puede hacer usando la biblioteca python netCDF4 de la siguiente manera:

    import netCDF4
    
    # Abrir uno de los archivos netCDF
    nc = netCDF4.Dataset('e.201001.nc', 'r+')
    
    # Obtener la variable de tiempo
    time_var = nc.variables['time']
    
    # Cambiar las unidades a "días desde 2010-01-01 00:00:00"
    time_var.units = 'días desde 2010-01-01 00:00:00'
    time_var[:] += (365 * 100)  # Agregar 100 años a los valores de tiempo
    
    # Cerrar el archivo netCDF
    nc.close()
    

    El código anterior cambia las unidades de la variable de tiempo a “días desde 2010-01-01 00:00:00” y agrega 100 años (36500 días) a los valores de tiempo en el archivo. Esto desplazará efectivamente el eje de tiempo de los archivos netCDF para comenzar desde 01.01.2010 00:00. Puede ejecutar este código en todos los archivos netCDF antes de combinarlos usando xarray.

    Alternativamente, también puede usar xarray para cambiar las unidades de la variable de tiempo y desplazar los valores de tiempo como sigue:

    import xarray as xr
    
    ds = xr.open_mfdataset('e.*.nc', combine='by_coords', concat_dim='time')
    
    # Cambiar las unidades de la variable de tiempo a "días desde 2010-01-01 00:00:00"
    ds['time'] = xr.cftime_range(start='2010-01-01', periods=len(ds['time']), freq='D')
    
    # Desplazar los valores de tiempo para comenzar desde "2010-01-01 00:00:00"
    ds['time'] = ds['time'] + xr.cftime_range(start='1900-01-01', periods=1, freq='D')
    
    ds.to_netcdf('eras_bir.nc')
    

    El código anterior usa la función cftime_range de xarray para crear una nueva variable de tiempo con unidades de “días desde 2010-01-01 00:00:00”. Luego agrega los valores de tiempo originales (con unidades de “días desde 1900-01-01 00:00:00”) a esta nueva variable de tiempo para desplazar el eje de tiempo para comenzar desde 01.01.2010 00:00. El resultado xarray.Dataset se puede guardar en un archivo netCDF usando ds.to_netcdf().

Comments are closed.