Luego de indagar en diferentes repositorios y foros finalmente hemos descubierto la solución que te enseñamos más adelante.
Solución:
Entiendo que su pregunta es que desea abrir varios archivos netcdf que contienen diferentes secciones espaciales de sus datos, donde el conjunto de datos general se ha desglosado a lo largo de ambos lat
y lon
.
Si ese es el caso, entonces me temo que xarray no admite esto en este momento, pregunté exactamente sobre el mismo problema en xarray github aquí.
También se preguntó sobre lo mismo en SO aquí. El concat
solución mencionada allí funcionará.
En mi caso, quise guardar el conjunto de datos concatenado en un solo archivo netcdf nuevo, pero al usar este método terminé cargando todos los datos en la memoria a la vez. Para evitar esto, terminé teniendo que usar la biblioteca python netcdf para resolver esto en un nivel inferior, pero requirió mucho esfuerzo.
xarray ahora admite la concatenación multidimensional directamente a través de open_mfdataset
.
La documentación sobre la combinación de datos a lo largo de múltiples dimensiones está aquí, pero como su pregunta es muy similar a esta, voy a copiar la key partes de mi respuesta aquí:
Tiene un problema de concatenación 2D: debe organizar los conjuntos de datos de manera que, cuando se unen a lo largo de x e y, formen un conjunto de datos más grande que también tenga dimensiones x e y.
Siempre y cuando len(x)
es el mismo en todos los archivos, y len(y)
es el mismo en todos los archivos, en teoría debería poder hacer esto de una o dos maneras diferentes.
1) Utilizando combine='nested'
Puede especificar manualmente el orden en el que necesita que se unan. xarray le permite hacer esto pasando los conjuntos de datos como una cuadrícula, especificada como una lista anidada. En su caso, si tuviéramos 4 archivos (llamados [upper_left, upper_right, lower_left, lower_right]), los combinaríamos así:
from xarray import open_mfdataset
grid = [[upper_left, upper_right],
[lower_left, lower_right]]
ds = open_mfdataset(grid, concat_dim=['x', 'y'], combine='nested')
Tuvimos que decir open_mfdataset
a qué dimensiones de los datos correspondían las filas y columnas de la cuadrícula, para que supiera a lo largo de qué dimensiones concatenar los datos. Por eso necesitábamos pasar concat_dim=['x', 'y']
.
2) Utilizando combine='by_coords'
Pero sus datos ya tienen coordenadas, ¿no puede xarray simplemente usarlas para organizar los conjuntos de datos en el orden correcto? Eso es lo que combine='by_coords'
opción es para, pero desafortunadamente, requiere coordenadas unidimensionales (también conocidas como coordenadas dimensionales) para organizar los datos. Si sus archivos no tienen ninguno de esos, la impresión dirá Dimensions without coordinates: x, y
).
Si puede agregar coordenadas unidimensionales a sus archivos primero, entonces podría usar combine='by_coords'
entonces podría simplemente pasar una lista de todos los archivos en cualquier orden, es decir
ds = open_mfdataset([file1, file2, ...], combine='by_coords')
Pero de lo contrario tendrás que usar combine='nested'
.