Выберите данные в файле netCDF по переменной - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь извлечь данные о погоде из файла netCDF на основе переменной. Файл .nc содержит 14 переменных и 2 измерения. Я хотел бы извлечь все данные из 14 переменных, связанных со значением первой переменной. Данные получены из Голландского метрологического института и могут быть найдены здесь .

Данные загружаются в Python с использованием модуля netCDF4 следующим образом:

import netCDF4 as nc
filename = r'path/file.nc'
dataset = nc.Dataset(filename)      

Печатные переменные и размеры:

dataset.variables.keys()
Out[67]: odict_keys(['station', 'time', 'lat', 'lon', 'DDVEC', 'FHVEC', 'TG', 'RH', 'UG', 'EV24', 'PG', 'iso_dataset', 'product', 'projection'])

dataset.dimensions.keys()
Out[68]: odict_keys(['station', 'time'])

Я хотел бы извлечь данные для конкретной «станции» и поместить их в пандусный фрейм данных для выполнения некоторых вычислений.

Я пытался что-то вроде этого, чтобы извлечь данные, однако я знаю, что это не так, как работают файлы netCDF, но я не могу понять, как.

df = dataset['344',:,:,:,:,:,:,:,:,0,0,0,0,0]

Краткий вопрос: есть ли способ извлечь данные для определенной станции и поместить их в панду DataFrame?

РЕШЕНИЕ

import pandas as pd
import xarray as xr
# Open netCDF file and convert to dataframe
open_netcdf = xr.open_dataset(filename)
dataset = open_netcdf.to_dataframe()
# Select data from a tuple index based on station number: 391
df = dataset.iloc[dataset.index.get_level_values(0) == '391',:]

1 Ответ

1 голос
/ 20 мая 2019

Да, есть способ.Расследуйте, используя xarray .Он легко обрабатывает данные в более высоком измерении.Фильтрация по одному измерению довольно тривиальна, и затем существует метод .to_dataframe (), который помещает весь ваш набор данных в фрейм данных Pandas с мультииндексом.

Посмотрите здесь пример использования xarray с данными о погоде.

...