我有一個熊貓資料框串列,我正在嘗試使用遞回和 numpy 將其連接成一個資料框。
def recur(framelist, index=0, result=0):
if index == len(framelist)-1:
return result
else:
return recur(np.concatenate((framelist[index],framelist[index 1])))
我的意圖是將資料框串列傳遞給 recur 函式。基本情況是到達串列末尾時。功能是連接所有資料幀對
但是我收到一個錯誤,即無法連接 0 維陣列
uj5u.com熱心網友回復:
要弄清楚發生了什么,逐步完成它是一個好主意。
你說你最初的呼叫是recur
傳入一個熊貓資料框串列。你沒有展示它們的創造,但是讓我們說它們就像......
framelist = [
pd.DataFrame(np.array([1, 2, 3])),
pd.DataFrame(np.array([4, 5])),
pd.DataFrame(np.array([6, 7])),
pd.DataFrame(np.array([8]))
]
因此,第一次通過它將 framelist 中的前兩個條目連接為 numpy 陣列。
[[1], [2], [3]] and [[4], [5]]
這將產生一個 numpy ndarray,如下所示:
[[1], [2], [3], [4], [5]]
這個結果作為新的幀串列傳遞給 recur()
第二次通過它連接來自 framelist 的前兩個條目。
[1] and [2]
這將產生一個 numpy 陣列,如下所示:
[1, 2]
這個結果作為新的幀串列傳遞給 recur()
第三次通過它連接來自 framelist 的前兩個條目。
1 and 2
這些只是數字,而不是陣列,因此您會看到錯誤'0 dimensional arrays cannot be concatenated'
這是一個如何使用遞回進行連接的示例。您不需要使用任何型別的索引引數來跟蹤。只需繼續從串列中洗掉第一個并將其余部分傳遞給 recur。當你到達串列中只剩下 1 個的點時,它會被傳回并與前一個連接。結果被向上傳遞并與前一個結果連接,等等。
def recur(framelist):
# keep going until there's just 1 left.
if len(framelist) == 1:
return framelist[0]
return np.concatenate((framelist[0], recur(framelist[1:])))
print(recur(framelist))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470049.html
上一篇:Soduko求解函式需要遞回