【问题标题】:How to add numpy matrix as new columns for pandas dataframe?如何将 numpy 矩阵添加为熊猫数据框的新列?
【发布时间】:2019-01-21 17:00:29
【问题描述】:

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

assign() keywords must be strings

columns overlap but no suffix specified

分别。

有没有办法可以添加一个 numpy 矩阵作为数据框列?

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    您可以将矩阵转换为数据框并将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
    

    【讨论】:

    • 由于某种原因 concat 没有完美地发生,不。尽管我没有相同的记录,但记录正在增加。 df 和 mat 中的记录数
    • @rishijain,如果它们之间的索引不匹配,您可能需要在连接它们之前在数据帧上 reset_index()
    【解决方案2】:

    设置

    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
    

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多