2016-11-19 52 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)? (順便說一句:你創建的輝煌模塊!) – TomTom101

+0

@shoyer,很好!我總是忘記'loc'索引器方法。 – jhamman

+0

不,我恐怕不可能在新的座標處插入數值。我更新了我的答案以澄清。 – shoyer

3

在xarray文檔中查看this section.sel方法都不允許分配。

任何轉讓應使用正常的索引來完成:擴展xarray的分配由座標標註能力

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

已經有議論,但我們沒有這樣的功能目前。在此之前,我們只需要提供一個標籤來索引位置映射,然後按照上面的語法。

+0

不幸的是,索引器不喜歡任務。我錯過了文檔中的「數據操作」這一部分,這讓我認爲這不是我想要的方式。 – TomTom101

+0

@ TomTom101 - 我已經更新了我的答案。在我的第一個例子中,我應該用整數索引器替換你的浮點數。 – jhamman