我有以下資料框。
test = {
"a": [[[1,2],[3,4]],[[1,2],[3,4]]],
"b": [[[1,2],[3,6]],[[1,2],[3,4]]]
}
df = pd.DataFrame(test)
df
| 一個 | b | |
|---|---|---|
| 0 | [[1,2],[3,4]] | [[1,2],[3,6]] |
| 1 | [[1,2],[3,4]] | [[1,2],[3,4]] |
例如,我想將第一列轉換為形狀為 (2,2,2) 的 numpy 陣列。如果我使用以下代碼,我將得到一個形狀為 (2,) 而不是 (2,2,2) 的陣列
df['a'].apply(np.asarray).values
如何獲得形狀為 (2,2,2) 的陣列?
uj5u.com熱心網友回復:
啊,愚蠢的問題。以下代碼有效:
np.array(list(df['a']))
有人有更好的解決方案嗎?謝謝!
uj5u.com熱心網友回復:
在創建列中包含串列或陣列的資料框時,最好清楚地了解存盤的內容。
In [545]: df
Out[545]:
a b
0 [[1, 2], [3, 4]] [[1, 2], [3, 6]]
1 [[1, 2], [3, 4]] [[1, 2], [3, 4]]
一幀是一個二維物件,一列,一個系列,是一維的。
to_numpy回傳一個陣列(np.array(df)并df.values做同樣的事情):
In [546]: df.to_numpy()
Out[546]:
array([[list([[1, 2], [3, 4]]), list([[1, 2], [3, 6]])],
[list([[1, 2], [3, 4]]), list([[1, 2], [3, 4]])]], dtype=object)
它是 2d,但 object dtype 意味著它包含(參考)串列。 df.info()也告訴我們。
In [547]: df['a'].to_numpy()
Out[547]: array([list([[1, 2], [3, 4]]), list([[1, 2], [3, 4]])], dtype=object)
列的 to_numpy 是 1d,再次是 object dtype。
In [548]: df['a'].to_list()
Out[548]: [[[1, 2], [3, 4]], [[1, 2], [3, 4]]]
這是一個純(嵌套)串列。與手寫嵌套串列一樣,它可以變成一個陣列:
In [550]: np.array(df['a'].to_list())
Out[550]:
array([[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]]])
對于您需要用來stack組合它們的陣列版本:
In [551]: np.stack(df['a'].to_numpy())
Out[551]:
array([[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]]])
不同的連接方法:
In [552]: np.vstack(df['a'].to_numpy())
Out[552]:
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412615.html
標籤:
上一篇:Python:如何使用pandas以迭代方式將資料從不同Excel檔案復制到新檔案中
下一篇:在二維陣列中選擇大于x的值
