【问题标题】:Appending two dataframes with same columns, different order附加两个具有相同列、不同顺序的数据框
【发布时间】:2014-02-21 11:56:45
【问题描述】:

我有两个 pandas 数据框。

noclickDF = DataFrame([[0, 123, 321], [0, 1543, 432]],
                      columns=['click', 'id', 'location'])
clickDF = DataFrame([[1, 123, 421], [1, 1543, 436]],
                      columns=['click', 'location','id'])

我只是想加入这样最终的 DF 看起来像:

click  |  id   |   location
0         123        321
0         1543       432
1         421        123
1         436       1543

如您所见,两个原始 DF 的列名相同,但顺序不同。列中也没有连接。

【问题讨论】:

    标签: python join pandas append


    【解决方案1】:

    你也可以使用pd.concat:

    In [36]: pd.concat([noclickDF, clickDF], ignore_index=True)
    Out[36]: 
       click    id  location
    0      0   123       321
    1      0  1543       432
    2      1   421       123
    3      1   436      1543
    

    在后台,DataFrame.append 调用 pd.concatDataFrame.append 具有处理各种类型输入的代码,例如系列、元组、列表和字典。如果你给它传递一个DataFrame,它会直接传递给pd.concat,所以使用pd.concat会更直接一些。

    【讨论】:

    • 很好的描述性答案。投票并建议添加ignore_index
    【解决方案2】:

    对于未来的用户(有时>pandas 0.23.0):

    您可能还需要添加 sort=True 以在非串联轴尚未对齐时对其进行排序(即保留 OP 所需的串联行为)。我使用上面提供的代码并收到警告,请参阅Python Pandas User Warning。下面的代码有效,不会引发警告。

    In [36]: pd.concat([noclickDF, clickDF], ignore_index=True, sort=True)
    Out[36]: 
       click    id  location
    0      0   123       321
    1      0  1543       432
    2      1   421       123
    3      1   436      1543
    

    【讨论】:

      【解决方案3】:

      您可以为此使用附加

       df = noclickDF.append(clickDF)
       print df 
      
          click    id  location
       0      0   123       321  
       1      0  1543       432
       0      1   421       123
       1      1   436      1543
      

      如果需要,您可以通过

      重置索引
      df.reset_index(drop=True)
      print df
         click    id  location
      0      0   123       321
      1      0  1543       432
      2      1   421       123
      3      1   436      1543
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-20
        • 2020-10-31
        • 2019-05-12
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 2020-06-28
        相关资源
        最近更新 更多