簡體   English   中英

從Pandas數據幀創建2D數組

[英]Create 2D array from Pandas dataframe

可能是一個非常簡單的問題,但我無法提出解決方案。 我有一個包含9列和~100000行的數據框。 從圖像中提取數據,使得兩列('row'和'col')指的是數據的像素位置。 如何創建一個numpy數組A,使得行和列指向另一列中的另一個數據條目,例如'grumpiness'?

A[row, col]
#  0.1232

我想避免使用for循環或類似的東西。

你可以這樣做 -

# Extract row and column information
rowIDs = df['row']
colIDs = df['col']

# Setup image array and set values into it from "grumpiness" column
A = np.zeros((rowIDs.max()+1,colIDs.max()+1))
A[rowIDs,colIDs] = df['grumpiness']

樣品運行 -

>>> df
   row  col  grumpiness
0    5    0    0.846412
1    0    1    0.703981
2    3    1    0.212358
3    0    2    0.101585
4    5    1    0.424694
5    5    2    0.473286
>>> A
array([[ 0.        ,  0.70398113,  0.10158488],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.21235838,  0.        ],
       [ 0.        ,  0.        ,  0.        ],
       [ 0.84641194,  0.42469369,  0.47328598]])

一個非常快速和直接的方法是使用pivot_table

>>> df
   row  col  grumpiness
0    5    0    0.846412
1    0    1    0.703981
2    3    1    0.212358
3    0    2    0.101585
4    5    1    0.424694
5    5    2    0.473286

>>> df.pivot_table('grumpiness', 'row', 'col', fill_value=0)
col         0         1         2
row                              
0    0.000000  0.703981  0.101585
3    0.000000  0.212358  0.000000
5    0.846412  0.424694  0.473286

請注意,如果缺少任何完整的行/列,則會將它們排除,如果重復任何行/列對,則會對結果取平均值。 也就是說,對於較大的數據集而言,這通常比基於索引的方法快得多。

暫無
暫無

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

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