#python #python-xarray
#python #python-xarray
Вопрос:
Я хочу выбрать данные из моего набора данных для соответствующих значений в моем временном ряду. Даты во временных рядах не являются непрерывными. Итак, я не могу использовать slice с. sel
Вот как выглядит индекс моего набора данных
ds.indexes
>longitude:Float64Index
>time: DatetimeIndex
Для фрейма данных Pandas, если бы у меня был индекс, основанный на времени, я мог бы просто использовать индексацию на основе меток, например
df.loc[['1979-01-09 00:00:00', '1979-01-09 06:00:00']]
Индексация Xarray основана на Pandas, но я не знаю, как реализовать описанный выше подход
ds.var1.loc[['1979-01-09 00:00:00', '1979-01-09 06:00:00']]
>KeyError: "not all values found in index 'time'"
Я также пытался:
ds.var1.sel(dict(time=('1979-01-09 00:00:00', '1979-01-09 06:00:00')))
>TypeError: Cannot convert input [('1979-01-09 00:00:00', '1979-01-09 06:00:00')] of type <class 'tuple'> to Timestamp
Было бы здорово узнать, как я могу заставить это работать как с .loc
помощью, так и sel
с помощью метода
Комментарии:
1. Один из способов — преобразовать
pandas
мой массив данных в фрейм данных, а затем использоватьdf.loc
метод работы, но, вероятно, он менее чистый для большого набора данных. Итак, я хотел бы знать, как я могу обойтись исключительно сxarray
индексацией.2. Вы уверены, что индексация фрейма данных, индексируемого DatetimeIndex, работает со списком строк? С pandas 0.24.0 я, кажется, получаю аналогичную ошибку.
3. Да, я проверил еще раз. Он работает с индексацией его как строки в Pandas DataFrame в версии 0.24.2 с использованием
.loc
4. Да, будет работать одна строка (хотя это имеет несколько иное значение, чем преобразование строки в объект datetime. Одна строка может представлять диапазон дат; примеры см. В разделе Частичное индексирование строк datetime ). Насколько я знаю, pandas не преобразует автоматически список строк в объекты datetime, как в моем ответе ниже.
5. @spencerkclark В ссылке они не использовали
.loc
метод. Я снова проверил, индексирование с помощью метода dict не работает для списка строк, но оно работает с использованием.loc
метода, если строка точно соответствует символам DatetimeIndex .
Ответ №1:
Я думаю, вам нужно сначала преобразовать строки в объекты datetime. pandas.to_datetime
должно сработать:
import pandas as pd
import xarray as xr
times = pd.date_range('2000-01-01', periods=3, freq='MS')
da = xr.DataArray(range(3), coords=[times], dims=['time'], name='a')
result = da.sel(time=pd.to_datetime(['2000-01-01', '2000-03-01']))
Комментарии:
1. Это не приходило мне в голову, и это было довольно просто, спасибо
2. Не могли бы вы связать меня с кодом
sel
метода? Я хотел бы узнать, что он делает под капотом. Я попытался найти его на GitHub, но я новичок в этом и не смог его найти3. Конечно, смотрите здесь .