如何将numpy矩阵添加为pandas数据帧的新列?

Boo*_*ley 6 python numpy dataframe pandas

我有一个 NxM数据帧和一个NxLnumpy矩阵.我想通过简单地按照它们出现的顺序附加列和行来将矩阵添加到数据框以创建L个新列.我试过merge()join(),但我最终错误:

assign() keywords must be strings

columns overlap but no suffix specified

分别.

有没有办法可以将numpy矩阵添加为数据帧列?

sac*_*cuL 14

你可以把矩阵划分成datframe并使用concat具有axis=1:

例如,给定一个数据帧df和一个numpy数组mat:

>>> df
   a  b
0  5  5
1  0  7
2  1  0
3  0  4
4  6  4

>>> mat
array([[0.44926098, 0.29567859, 0.60728561],
       [0.32180566, 0.32499134, 0.94950085],
       [0.64958125, 0.00566706, 0.56473627],
       [0.17357589, 0.71053224, 0.17854188],
       [0.38348102, 0.12440952, 0.90359566]])
Run Code Online (Sandbox Code Playgroud)

你可以做:

>>> pd.concat([df, pd.DataFrame(mat)], axis=1)
   a  b         0         1         2
0  5  5  0.449261  0.295679  0.607286
1  0  7  0.321806  0.324991  0.949501
2  1  0  0.649581  0.005667  0.564736
3  0  4  0.173576  0.710532  0.178542
4  6  4  0.383481  0.124410  0.903596
Run Code Online (Sandbox Code Playgroud)


use*_*203 5

设置

df = pd.DataFrame({'a': [5,0,1,0,6], 'b': [5,7,0,4,4]})
mat = np.random.rand(5,3)
Run Code Online (Sandbox Code Playgroud)

使用join

df.join(pd.DataFrame(mat))
Run Code Online (Sandbox Code Playgroud)

   a  b         0         1         2
0  5  5  0.884061  0.803747  0.727161
1  0  7  0.464009  0.447346  0.171881
2  1  0  0.353604  0.912781  0.199477
3  0  4  0.466095  0.136218  0.405766
4  6  4  0.764678  0.874614  0.310778
Run Code Online (Sandbox Code Playgroud)

如果有可能重叠列名,只需提供一个后缀:

df = pd.DataFrame({0: [5,0,1,0,6], 1: [5,7,0,4,4]})
mat = np.random.rand(5,3)
Run Code Online (Sandbox Code Playgroud)

df.join(pd.DataFrame(mat), rsuffix='_')
Run Code Online (Sandbox Code Playgroud)

   0  1        0_        1_         2
0  5  5  0.783722  0.976951  0.563798
1  0  7  0.946070  0.391593  0.273339
2  1  0  0.710195  0.827352  0.839212
3  0  4  0.528824  0.625430  0.465386
4  6  4  0.848423  0.467256  0.962953
Run Code Online (Sandbox Code Playgroud)