从一个数据框中获取列名称,并将它们作为空列添加到pandas中的另一个数据框中

slo*_*v83 2 python dataframe pandas

我有一个数据框(df1)有5列,另一个(df2)有10列.我想将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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我希望得到这个:

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
Run Code Online (Sandbox Code Playgroud)

我希望得到这个:

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
Run Code Online (Sandbox Code Playgroud)

我尝试使用df.columns.values并获得列名称数组,但后来我必须将它们作为数据框列应用并给它们空值,而我现在的方式有太多代码行,而我只是想知道这是一种更简单的方法吗?我将不胜感激任何帮助.

jez*_*ael 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
Run Code Online (Sandbox Code Playgroud)

如果两个DataFrames中的索引值相同,则使用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
Run Code Online (Sandbox Code Playgroud)