簡體   English   中英

將 numpy 數組轉換為 Pandas 數據框

[英]Convert numpy array to pandas dataframe

我有一個大小為31x36的 numpy 數組,我想將其轉換為31x36數據幀以進行處理。 我正在嘗試使用以下代碼轉換它:

pd.DataFrame(data=matrix,
          index=np.array(range(1, 31)),
          columns=np.array(range(1, 36)))

但是,我收到以下錯誤:

ValueError: 傳遞值的形狀是 (36, 31),索引意味着 (35, 30)

如何解決問題並正確轉換?

至於您嘗試失敗的原因,范圍相差 1

pd.DataFrame(data=matrix,
          index=np.array(range(1, 32)),
          columns=np.array(range(1, 37)))

由於最后一個值不包含在范圍內

實際上,看看你在做什么,你本可以做的:

pd.DataFrame(data=matrix,
          index=np.arange(1, 32)),
          columns=np.arange(1, 37)))

或者在純pandas

pd.DataFrame(data=matrix,
          index=pd.RangeIndex(range(1, 32)),
          columns=pd.RangeIndex(range(1, 37)))

此外,如果您不指定索引和列參數,則會生成一個自動生成的索引和列,它們將從0開始。 不清楚為什么需要它們從1開始

您也可以沒有傳遞索引和列參數,只是在構造后修改它們:

In[9]:
df = pd.DataFrame(adaption)
df.columns = df.columns+1
df.index = df.index + 1
df

Out[9]: 
          1         2         3         4         5         6
1 -2.219072 -1.637188  0.497752 -1.486244  1.702908  0.331697
2 -0.586996  0.040052  1.021568  0.783492 -1.263685 -0.192921
3 -0.605922  0.856685 -0.592779 -0.584826  1.196066  0.724332
4 -0.226160 -0.734373 -0.849138  0.776883 -0.160852  0.403073
5 -0.081573 -1.805827 -0.755215 -0.324553 -0.150827 -0.102148

您遇到錯誤,因為range(start, end)end參數是non-inclusive 您有幾個選項可以解決這個問題:

不要傳遞索引和列

只需使用df = pd.DataFrame(matrix) pd.DataFrame構造函數隱式添加整數索引。

傳入數組的形狀

matrix.shape給出了行數和列數的元組,因此您無需手動指定它們。 例如:

df = pd.DataFrame(matrix, index=range(matrix.shape[0]),
                          columns=range(matrix.shape[1]))

如果需要從1開始,記得加 1:

df = pd.DataFrame(matrix, index=range(1, matrix.shape[0] + 1),
                          columns=range(1, matrix.shape[1] + 1))

除了上述答案, range(1, X)描述了從1X-1的一組數字。 您需要使用range(1, 32)range(1, 37)來執行您所描述的操作。

暫無
暫無

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

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