Python - выбор на основе критериев для файлов netCDF - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть файл netCDF test.nc, включающий следующие переменные:

  • time
  • lat
  • lon
  • Lai_500m
  • FparLai_QC

Все переменные (кроме time, lat, lon) имеют форму 1523, 120, 120.

Теперь я хотел бы выбрать только те данные, которые были помечены, имеют высокое качество в FparLai_QC и данные, имеющие Lai_500m <20. </p>

Для этого у меня естьпробовал:

os.chdir(inbasedir)
data = xr.open_dataset('MCD15A3H.006_500m_aid0001.nc')
qc_data = data.loc[(dict(var='Lai_500m') < 20) &
                  (dict(var='FparLai_QC') == 0) ]

и:

os.chdir(inbasedir)
data = xr.open_dataset('MCD15A3H.006_500m_aid0001.nc')
qc_data = data.loc[(data['Lai_500m'] < 20) &
                  (data['FparLai_QC'] == 0) ]

Они оба возвращали одну и ту же ошибку:

TypeError: can only lookup dictionaries from Dataset.loc

Кто-нибудь знает, как добиться моего выбора данных?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Я бы не использовал где в этом случае.Если вы используете Xarray для чтения вашего файла netcdf, я бы предпочел использовать sel (фильтрация по значению) или isel (фильтрация по индексу).

т.е.

import xarray as xr
    with xr.open_dataset(
            filename_or_obj='file_name.nc',
            engine='netcdf4') as file:
        WIND = file.WIND.sel(Lai_500m=20,
                             FparLai_QC=0).sel(
            time=start_date, method='nearest')
0 голосов
/ 27 февраля 2019

Метод Xarray where подходит для операций такого типа:

qc_data = data.where((data['Lai_500m'] < 20) & (data['FparLai_QC'] == 0))

Вы также можете найти ключевое слово drop полезным, если вы хотите удалить метки координат, которые толькосоответствуют ложным значениям условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...