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

Posted

技术标签:

【中文标题】pandas - 追加具有不同列数的新行【英文标题】:pandas - append new row with a different number of columns 【发布时间】:2020-02-06 06:48:58 【问题描述】:

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

Year | Thing1 | Thing2
2010 |  748   |   461
2011 |  246   |   493
2012 |  394   |   731

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

添加如下内容就可以了:

Year | Thing1 | Thing2
2013 |  561   |  197

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

Year | Thing1 | Thing2 | Thing3
2013 |  561   |   197  |   369

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

Year | Thing1 | Thing3 | Thing2
2013 |  561   |   369  |   197

所需的输出如下:

Year | Thing1 | Thing2 | Thing3
2010 |  748   |  461   |   0
2011 |  246   |  493   |   0
2012 |  394   |  731   |   0
2013 |  561   |  197   |  369

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

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

【问题讨论】:

将轴=1 更改为轴=0 【参考方案1】:

简单地将pd.concatfillna(0) 链接起来:

pd.concat([df, df_new], sort=False).fillna(0)

输出

   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

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

pd.concat([df, df_new], sort=False, ignore_index=True).fillna(0)

输出

   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

【讨论】:

【参考方案2】:

一个 concat 应该可以解决问题。但是您希望默认的轴 0 添加行而不是列,并忽略索引值。

df = pd.concat([df_original, df_new], sort=False, ignore_index=True)

这将放置 Nan 而不是上面的 0,但您可以根据需要替换它们。

【讨论】:

以上是关于pandas - 追加具有不同列数的新行的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 连接两个具有不同行数和列数的数据框

解析具有未知列数的 Pandas 数据框以在 statsmodels.api 中使用

Pandas:使用多张工作表导入 xlsx,将列添加到每个 df 及其所属工作表的名称,将具有相同列数的 df 连接起来

使用 jQuery 将新行追加到表中 [重复]

使用新行 Linux 搜索和追加

Big Query 追加新行