Нарезка массива данных Python

#python #arrays #slice #python-xarray

Вопрос:

У меня есть массив данных python формы, размеров и координат —

 month_means.shape
Out[212]: (12, 141, 269)

month_means.dims
Out[213]: ('month', 'latitude', 'longitude')

Coordinates:
    number     int32 0
    step       timedelta64[ns] 00:00:00
    surface    float64 0.0
  * latitude   (latitude) float64 58.0 57.75 57.5 57.25 ... 23.5 23.25 23.0
  * longitude  (longitude) float64 -130.0 -129.8 -129.5 ... -63.5 -63.25 -63.0
  * month      (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
 

Мне нужно извлечь или нарезать массив данных для «месяца» == 9, и я использую этот код ниже, но я получаю пустой результат (shape = (0,141,269)) и не могу понять, почему, потому что он извлекается для других месяцев, таких как «5» или «6» (здесь не показано)-

 month_means.loc[dict(month=slice('9','9'))]
Out[214]: 
<xarray.DataArray (month: 0, latitude: 141, longitude: 269)>
array([], shape=(0, 141, 269), dtype=float64)
Coordinates:
    number     int32 0
    step       timedelta64[ns] 00:00:00
    surface    float64 0.0
  * latitude   (latitude) float64 58.0 57.75 57.5 57.25 ... 23.5 23.25 23.0
  * longitude  (longitude) float64 -130.0 -129.8 -129.5 ... -63.5 -63.25 -63.0
  * month      (month) int64 
 

Как ни странно, если я использую этот код для извлечения ‘month’ == 7, он дает следующий ответ ниже:

 month_means.loc[dict(month=slice('7','7'))]

Coordinates:
    number     int32 0
    step       timedelta64[ns] 00:00:00
    surface    float64 0.0
  * latitude   (latitude) float64 58.0 57.75 57.5 57.25 ... 23.5 23.25 23.0
  * longitude  (longitude) float64 -130.0 -129.8 -129.5 ... -63.5 -63.25 -63.0
  * month      (month) int64 7 8 9 10 11 12
 

Спасибо,

Комментарии:

1. похоже, вы объединяете целые числа и строки в качестве значений координат. Я не уверен, что полностью понимаю вопрос, но я полагаю, что вы хотите использовать .sel , а не .loc (см. Документы xarray.pydata.org/en/stable/generated/xarray . DataArray.sel.html ). Я считаю, что вы хотите сделать это month_means.sel(month=9)