Чтение нескольких файлов.nc в питоне 3D-панд

Я хотел бы прочитать в нескольких файлах SST netcdf и из каждого файла извлечь данные SST в выбранном диапазоне широт, долгот, а затем сохранить эти данные в трехмерном фрейме данных panda. Закрытие каждого netcdf после его прочтения для экономии памяти.

Я хотел бы закончить одним фреймом из ежедневных данных за годы.

Я прочитал один файл с NetCDF4 и сохранил каждую переменную, но это насколько я получил.

my_file = 'C:/Users/lisa/Desktop/Sean/20160719000127-UoS-L2i-SSTskin-ISAR_002-D054_PtA-v01.0-fv01.5.nc'
fh = netCDF4.Dataset(my_file, mode='r')
lon = fh.variables['lon'][:]
lat = fh.variables['lat'][:]
time = fh.variables['time'][:]
sst = fh.variables['sea_surface_temperature'][:]

Данные взяты из OPeNDAP за 2016 год по следующему адресу.

http://www.ifremer.fr/opendap/cerdap1/ghrsst/l4/saf/odyssea-nrt/data/

Любая помощь приветствуется!!

2 ответа

Pandas.DataFrame не поддерживает трехмерные данные таким образом. Этот вариант использования именно поэтому xarray был развит.

Делать то, что вы пытаетесь сделать в xarray:

import xarray as xr

ds = xr.open_mfdataset(['file1.nc', 'file2.nc', 'file3.nc'])

Это объединит ваши файлы воедино и объединит все xarray.Dataset, получить 1d или 2d данные в Pandas довольно легко

ds.sel(lat=36.0, lon=42.5).to_dataframe()

Я бы предложил предварительную обработку с CDO, например

cdo mergetime 2016*-UoS-L2i-SSTskin-ISAR_002-D054_PtA-v01.0-fv01.5.nc merged.nc
cdo sellonlatbox,lon1,lon2,lat,lat2 merged.nc box_2016.nc

У вас может быть ограничение на количество открытых файлов (256) в вашей системе, и в этом случае вам нужно будет разделить команду mergetime на цикл по месяцам, извлечь область и затем выполнить окончательное время слияния для 12 месячных файлов в конце.

Другие вопросы по тегам