如何将numpy矩阵添加为熊猫数据框的新列?

时间:2018-08-14 18:58:39

标签: python pandas numpy dataframe

我有一个NxM数据帧和一个NxL numpy矩阵。我想通过简单地将列和行以它们出现的相同顺序附加到数据帧中,以将矩阵添加到数据框中以创建L个新列。我尝试了merge()join(),但最终出现错误:

  

assign() keywords must be strings

  

columns overlap but no suffix specified

分别。

有没有一种方法可以将numpy矩阵添加为数据框列?

2 个答案:

答案 0 :(得分:7)

您可以将矩阵转换为datframe并将concataxis=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]])

您可以这样做:

>>> 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

答案 1 :(得分:1)

设置

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

使用join

df.join(pd.DataFrame(mat))

   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

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

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

df.join(pd.DataFrame(mat), rsuffix='_')

   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