pandas - 追加具有不同列数的新行

adi*_*din 1 python merge row append pandas

我有一个如下所示的数据框(df_original):

Year | Thing1 | Thing2
2010 |  748   |   461
2011 |  246   |   493
2012 |  394   |   731
Run Code Online (Sandbox Code Playgroud)

我需要偶尔追加新数据。有时,我得到的数据将具有相同数量的标头。有时,我不会。我也不能指望标题的顺序是相同的。

附加类似以下内容就可以了:

Year | Thing1 | Thing2
2013 |  561   |  197
Run Code Online (Sandbox Code Playgroud)

但是,我也可以收到这个,一个新东西(df_new):

Year | Thing1 | Thing2 | Thing3
2013 |  561   |   197  |   369
Run Code Online (Sandbox Code Playgroud)

编辑:我也可以接收这个数据帧来追加,是否会以不同的顺序连接标题?

Year | Thing1 | Thing3 | Thing2
2013 |  561   |   369  |   197
Run Code Online (Sandbox Code Playgroud)

所需的输出如下:

Year | Thing1 | Thing2 | Thing3
2010 |  748   |  461   |   0
2011 |  246   |  493   |   0
2012 |  394   |  731   |   0
2013 |  561   |  197   |  369
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到这个结果?

我认为pd.concat([df_original, df_new], join = 'outer', axis = 1, sort = False)可能会因为这篇文章而这样做,但它将新数据放在 df_original 中原始数据的右侧。

Erf*_*fan 5

简单的连锁pd.concat有fillna(0):

pd.concat([df, df_new], sort=False).fillna(0)
Run Code Online (Sandbox Code Playgroud)

输出

   Year  Thing1  Thing2  Thing3
0  2010     748     461     0.0
1  2011     246     493     0.0
2  2012     394     731     0.0
0  2013     561     197   369.0
Run Code Online (Sandbox Code Playgroud)

如果要重置索引,请使用ignore_index:

pd.concat([df, df_new], sort=False, ignore_index=True).fillna(0)
Run Code Online (Sandbox Code Playgroud)

输出

   Year  Thing1  Thing2  Thing3
0  2010     748     461     0.0
1  2011     246     493     0.0
2  2012     394     731     0.0
3  2013     561     197   369.0
Run Code Online (Sandbox Code Playgroud)