首页 > 解决方案 > Pandas - 将具有不同名称和列数的数据帧堆叠在一起

问题描述

我正在尝试从两个完全不同的数据帧创建一个 csv 日志,所以我不能简单地连接/合并。第一个数据帧只是一行数据点,其列比第二个数据帧多,而第二个数据帧有一堆数据点行。我还想在它们之间添加一个空白行以增加清晰度。有没有办法将它们组合在一起,使第二个数据帧的空白单元格获得 NaN 值?

考虑下面的简化示例:

数据框 1:

    Col A  Col B  Col C  Col D  Col E
0    XYZ    452   GHJ    089     IUT   

数据框 2:

    Data1  Data2  Data3  Data4
0   1234   4567   7890   6543      
1   8765   4565   8767   0987
..
n   4387   0943   4598   3212

输出:

    Col A  Col B  Col C  Col D  Col E
0    XYZ    452   GHJ    089     IUT     
1    NaN    NaN   NaN    NaN     NaN
2    1234   4567  7890   6543    NaN
3    8765   4565  8767   0987    NaN
..
n    4387   0943  4598   3212    NaN

标签: python-3.xpandasdataframe

解决方案


针对您的需求。

  1. 将第二个数据框的列混搭为与第一个宽的列相同,这样您就不会变宽
  2. 然后他们插入一个新的数据帧,在第一个数据帧的第一列concat()之间插入一个虚拟数据帧np.nan
import numpy as np
df1 = pd.DataFrame({"Col A":["XYZ"],"Col B":[452],"Col C":[" GHJ"],"Col D":[89],"Col E":[" IUT"]})
df2 = pd.DataFrame({"Data1":[1234,8765,4387],"Data2":[4567,4565,943],"Data3":[7890,8767,4598],"Data4":[6543,987,3212]})
df2.columns=[df1.columns[i] for i,c in enumerate(df2.columns) if i<len(df1.columns)]

pd.concat([
    df1,
    pd.DataFrame({df1.columns[0]:[np.nan]}),
    df2
])

输出

Col A   Col B Col C   Col D Col E
  XYZ   452.0   GHJ    89.0   IUT
  NaN     NaN   NaN     NaN   NaN
 1234  4567.0  7890  6543.0   NaN
 8765  4565.0  8767   987.0   NaN
 4387   943.0  4598  3212.0   NaN

推荐阅读