从一个数据框中获取列名称,并将其作为空列添加到熊猫中的另一个数据框中

时间:2018-12-04 07:02:26

标签: python pandas dataframe

我有一个5列的数据帧(df1),另一个有10列的数据帧(df2)。我想将列从df2添加到df1,但仅添加列名称(无值)。另外,我想对添加没有值的列(从df1到df2)执行相同的操作。

以下是数据帧:

df1

  A      B     C      D     E     
  1      234   52     1     54
  54     23    87     5     125
  678    67    63     8     18
  45     21    36     5     65
  8      5     24     3     13

df2

  F      G     H      I     J      K      L     M      N     O     
  12     34    2      17    4      19     54    7      58    123
  154    3     7      53    25     2      47    27     84    6
  78     7     3      82    8      56     21    29     547   1

我想得到这个:

df1

  A      B     C      D     E      F      G      H      I      J      K      L      M      N      O     
  1      234   52     1     54
  54     23    87     5     125
  678    67    63     8     18
  45     21    36     5     65
  8      5     24     3     13

我想得到这个:

df2

  A       B       C       D      E      F      G     H      I     J      K      L     M      N     O     
                                        12     34    2      17    4      19     54    7      58    123
                                        154    3     7      53    25     2      47    27     84    6
                                        78     7     3      82    8      56     21    29     547   1

我尝试使用df.columns.values并获得了列名称数组,但是随后我必须将它们应用为数据框列并给它们提供空值,而我现在的方式有太多的代码行,我只是想知道这样做是否更简单? 我将不胜感激。

1 个答案:

答案 0 :(得分:6)

Index.unionDataFrame.reindex一起使用:

cols = df1.columns.union(df2.columns)
#if order is important
#cols = df1.columns.append(df2.columns)

df1 = df1.reindex(columns=cols)
df2 = df2.reindex(columns=cols)

print (df1)
     A    B   C  D    E   F   G   H   I   J   K   L   M   N   O
0    1  234  52  1   54 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1   54   23  87  5  125 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2  678   67  63  8   18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3   45   21  36  5   65 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4    8    5  24  3   13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

print (df2)
    A   B   C   D   E    F   G  H   I   J   K   L   M    N    O
0 NaN NaN NaN NaN NaN   12  34  2  17   4  19  54   7   58  123
1 NaN NaN NaN NaN NaN  154   3  7  53  25   2  47  27   84    6
2 NaN NaN NaN NaN NaN   78   7  3  82   8  56  21  29  547    1

如果两个DataFrame中都可以使用相同的索引值,请使用DataFrame.align

print (df1)
     A    B   C  D    E
0    1  234  52  1   54
1   54   23  87  5  125
2  678   67  63  8   18

df1, df2 = df1.align(df2)
print (df1)
     A    B   C  D    E   F   G   H   I   J   K   L   M   N   O
0    1  234  52  1   54 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1   54   23  87  5  125 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2  678   67  63  8   18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

print (df2)
    A   B   C   D   E    F   G  H   I   J   K   L   M    N    O
0 NaN NaN NaN NaN NaN   12  34  2  17   4  19  54   7   58  123
1 NaN NaN NaN NaN NaN  154   3  7  53  25   2  47  27   84    6
2 NaN NaN NaN NaN NaN   78   7  3  82   8  56  21  29  547    1