2016-11-19 2 views
1

Я пытаюсь заполнить DataArray некоторой метаинформацией о ячейках, чтобы добавить ее в набор данных.Вставить в DataArray с определенной координатой

airtemps = xr.tutorial.load_dataset('air_temperature') 
airtemps = airtemps.sel(time=slice('2013-01-01', '2013-12-31')) 

Я могу установить весь новый набор данных, приведенных существующие размеры:

airtemps['some_data'] = ([ 'lat', 'lon'], np.random.rand(25,53)) 

То, что я хотел бы это добавить одну точку данных при заданной координаты, в основном

airtemps.some_data.sel_points(lat=75., lon=200.) = "New data" 

Можно ли это сделать?

ответ

3

Он не работает с sel_points, но вместо того, чтобы раскладка с .sel вы можете использовать .loc индексатор, например,

airtemps.some_data.loc[dict(lat=75., lon=200.)] = "New data" 

Обратите внимание, что это будет работать только тогда, когда точка (lat=75., lon=200.) уже существует в airtemps. Xarray не поддерживает вставку значений в новые координаты, поскольку это не может быть эффективно реализовано с помощью структур данных на основе NumPy. Если вам нужно вставить новые значения, вам нужно будет создать новую структуру данных xarray с соответствующими значениями с нуля.

+0

Спасибо! Поближе. Есть ли способ включить данные с новыми координатами (например, lat = 74,5)? (btw: Блестящий модуль, который вы там создали!) – TomTom101

+0

@shoyer, Nice! Я всегда забываю о методе индексатора loc. – jhamman

+0

Нет, я боюсь, что невозможно вставить значения в новые координаты. Я уточнил свой ответ, чтобы уточнить. – shoyer

3

Посмотрите на this section в документах xarray. Ни один из методов .sel не позволяет присвоить.

Любое задание должно быть сделано с помощью обычного индексирования:

airtemps.some_data[dict(lat=0, lon=0)] = 4 

Там был разговор о расширении возможностей xarray уступать по координатной метки, но мы не имеем, что функция в данный момент. До тех пор нам просто нужно придумать метку для сопоставления позиции индекса, а затем следовать приведенному выше синтаксису.

+0

На самом деле, индексатору не нравятся задания. Мне не хватает раздела в подобных «манипуляциях с данными» в документах, что заставляет меня думать, что это не работает так, как хотелось бы. – TomTom101

+0

@ TomTom101 - Я обновил свой ответ. Я должен был заменить ваши поплавки целыми индексаторами в моем первом примере. – jhamman