如何连接 2 个具有不同长度标头的数据帧?我想将第二个数据帧的标题添加为一行。
下面是我的
df1
:
df1 = pd.DataFrame({'A': [1, 2], 'B': [2, 3], 'C': [3, 4]})
df1
A B C
0 1 2 3
1 2 3 4
df2
:
df2 = pd.DataFrame({'D': [34, 'e'], 'E': ['rt', 'rt']})
df2
D E
0 34 rt
1 e rt
我的预期输出:
df = pd.DataFrame({'A': [1, 2,'D',34,'e'], 'B': [2, 3,'E','rt','rt'],
'C': [3, 4,'','','']})
A B C
0 1 2 3
1 2 3 4
2 D E
3 34 rt
4 e rt
到目前为止我的尝试未能达到我的预期输出:
(1)
df = pd.concat([df1, df2], axis = 0/1)
(2)
df1_header = pd.DataFrame([df2.columns], columns=df1.columns)
df2.columns = df1.columns
result = pd.concat([df1_header, df1, df2], ignore_index=True)
这是一种方法:
df = (
pd.concat(
[
df1,
df2.T.reset_index().T.rename(
columns={k: v for k, v in iter(enumerate(df1.columns))}
)
],
axis=0,
ignore_index=True
)
)
输出
A B C
0 1 2 3
1 2 3 4
2 D E
3 34 rt
4 e rt
解释
df2
、
df.T
和再次
df.reset_index
将 df.T
的列名称移至第一行。重置后,df2
现在将具有列名称 [0, 1]
,而不是 ['D', 'E']
。df1
中的列名称,并使用 iter
的
df.rename
版本将迭代器 (
enumerated
) 传递到
df1.columns
。pd.concat
上使用
axis=0
并忽略索引。NaN
值。如果您想坚持这一点,请添加 df.fillna('')
。