Чтение нескольких файлов.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 месячных файлов в конце.