代码之家  ›  专栏  ›  技术社区  ›  RedHand

沿轴1使用pandas.concat返回沿轴0的级联

  •  2
  • RedHand  · 技术社区  · 1 年前

    我试图水平连接一对具有相同索引的数据帧,但结果总是垂直连接,其中NaN值插入到每一列中。

    dct_l = {'1':'a', '2':'b', '3':'c', '4':'d'}
    df_l = pd.DataFrame.from_dict(dct_l, orient='index', columns=['Key'])
    
    dummy = np.zeros((4,3))
    index = np.arange(1,5)
    columns = ['POW', 'KLA','CSE']
    df_e = pd.DataFrame(dummy, index, columns)
    
    print(df_l)
    
      Key
    1   a
    2   b
    3   c
    4   d
    
    print(df_e)
    
       POW  KLA  CSE
    1  0.0  0.0  0.0
    2  0.0  0.0  0.0
    3  0.0  0.0  0.0
    4  0.0  0.0  0.0
    
    
    pd.concat([df_l, df_e], axis=1)
    

    实际结果

       Key  POW  KLA  CSE
    1    a  NaN  NaN  NaN
    2    b  NaN  NaN  NaN
    3    c  NaN  NaN  NaN
    4    d  NaN  NaN  NaN
    1  NaN  0.0  0.0  0.0
    2  NaN  0.0  0.0  0.0
    3  NaN  0.0  0.0  0.0
    4  NaN  0.0  0.0  0.0
    

    预期结果

       Key  POW  KLA  CSE
    1    a  0.0  0.0  0.0
    2    b  0.0  0.0  0.0
    3    c  0.0  0.0  0.0
    4    d  0.0  0.0  0.0
    

    这里发生了什么事?

    1 回复  |  直到 1 年前
        1
  •  2
  •   mozway    1 年前

    您的两个索引有不同的数据类型:

    df_e.index
    Index([1, 2, 3, 4], dtype='int64')
    
    df_l.index
    Index(['1', '2', '3', '4'], dtype='object')
    

    这将破坏对齐( 1 != '1' ).

    确保它们完全相同。

    例如

    pd.concat([df_l.rename(int), df_e], axis=1)
    
      Key  POW  KLA  CSE
    1   a  0.0  0.0  0.0
    2   b  0.0  0.0  0.0
    3   c  0.0  0.0  0.0
    4   d  0.0  0.0  0.0