从一个数据框中获取缺少的列,并将其附加到另一数据框中

时间:2019-05-16 20:08:06

标签: python pandas dataframe

我有一个带有列的数据框df1。我需要将df1中的列标题与df2

中的标题列表进行比较
df1 =['a','b','c','d','f']
df2 =['a','b','c','d','e','f'] 

我需要将df1df2进行比较,如果缺少任何列,则需要将它们添加到带有空白值的df1中。

我尝试了concat,也尝试了append,但都没有用。使用concat,我无法添加列e,而使用append,它将附加来自df1df2的所有列。我怎么会只以相同的顺序将缺失的列添加到df1中?

df1_cols = df1.columns
df2_cols = df2._combine_match_columns

if (df1_cols == df2_cols).all():
        df1.to_csv(path + file_name, sep='|')
else:
    print("something is missing, continuing")
    #pd.concat([my_df,flat_data_frame], ignore_index=False, sort=False)
    all_list = my_df.append(flat_data_frame, ignore_index=False, sort=False)

我希望结果显示为

a|b|c|d|e|f - > headers
1|2|3|4||5 -> values

2 个答案:

答案 0 :(得分:2)

pandas.DataFrame.align

df1.align(df2, axis=1)[0]
  • 默认情况下,这会进行'outer'连接
  • 通过指定axis=1,我们专注于列
  • 这将返回一个对齐的tupledf1的{​​{1}},其中调用数据帧是第一个元素。因此,我使用df2
  • 来抓取第一个元素

[0]

pandas.DataFrame.reindex
  • 大多数时候,您可以将df1.reindex(columns=df1.columns | df2.columns) 对象视为集合。因此pandas.Index是这两个索引对象的并集。然后,我df1.columns | df2.columns使用结果。

答案 1 :(得分:0)

首先让我们创建两个数据框:

import pandas as pd, numpy as np
df1 = pd.DataFrame(np.random.random((5,5)), columns = ['a','b','c','d','f'])
df2 = pd.DataFrame(np.random.random((5,7)), columns = ['a','b','c','d','e','f','g'])

现在将df2的那些列添加到df1中(具有nan值),这些列不在df1中:

for i in list(df2):
    if i not in list(df1):
        df1[i] = np.nan

现在按字母顺序显示df1的列:

df1 = df1[sorted(list(df1))]