簡體   English   中英

使用索引從 XArray 的 DataArray 中提取值到列

[英]Extract values from XArray's DataArray to column using indices

所以,我正在做一些可能有點不正統的事情,我有許多基於 NLCD 的 90 億像素柵格地圖,我想從這些柵格中獲取曾經建立的像素的值,大約有 5 億:

built_up_index = pandas.DataFrame(np.column_stack(np.where(unbuilt == 0)), columns = ["row", "column"]).sort_values(["row", "column"])

上面的那段代碼給了我一個 dataframe,其中一列是行索引,另一列是所有像素的列索引,這些像素顯示了任何 NLCD 柵格地圖中的構造(未構建的是包含它的 ones 和 zeros 柵格)。

我想用它從這些 NLCD 地圖和其他地圖中讀取值,這樣每個像素都是一行,每一列都是一個變量,比如說,它在 NLCD 2001 中的值,然后是它在 2004 年、2006 年的值,依此類推(以及我計算的其他指數)。 所以 dataframe 看起來是這樣的:

|行| 欄目 | 值_2001 | 價值_2004 | 變量3 |...

(這里的值)

我嘗試了以下操作:

test = sprawl_2001.isel({'y': np.array(built_up_frame.iloc[:,0]), 'x': np.array(built_up_frame.iloc[:,1])}, drop = True).to_dataset(name="var").to_dataframe()

如果我這樣取子樣本,這會起作用:

test = sprawl_2001.isel({'y': np.array(built_up_frame.iloc[0:10000,0]), 'x': np.array(built_up_frame.iloc[0:10000,1])}, drop = True).to_dataset(name="var").to_dataframe()

但它沒有做我想要的,因為長度是平方的,因為它似乎試圖創建一個二維數組,然后將其展平,而我想要的是一個包含我二次采樣的像素值的向量。

我顯然可以在一個循環中逐個像素地執行此操作,但我想這對於 5 億個值來說會非常慢,並且必須有一種更有效的方法。

這里有什么建議嗎?

編輯:最后我放棄了使用索引,因為我得到的印象是 Xarrays 只會制作一個與我的原始數據集具有相同維度(大約 161000 列和 104000 行)的數組,但有一堆缺失值,而不是創建具有我想要的值的列向量。 我正在使用 np.extract:

def src_to_frame(src, unbuilt, varname):
    return pd.DataFrame(np.extract(unbuilt == 0, src), columns=[varname])

其中 src 是包含感興趣變量的柵格,unbuilt 是相同大小的柵格,其中 0s 是曾經構建的像素,varname 是變量的名稱。 它做我想做的並且適合我擁有的 RAM。 也許不是最理想的,但它確實有效!

這看起來像是使用 DataArrays 進行高級索引的一個很好的應用程序

sprawl_2001.isel(
    y=built_up_frame.iloc[0:10000,0].to_xarray(), 
    x=built_up_frame.iloc[0:10000,1].to_xarray(),
).to_dataset(name="var").to_dataframe()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM