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.concat
与fillna(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 连接起来