You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中纵向拼接列数不同的DataFrame?

实现DataFrame的非对齐纵向追加

原始数据

import pandas as pd

df1 = pd.DataFrame({'A': [3, 6], 'B': [4, 7]}, index=[1,2])
df2 = pd.DataFrame({'C': [20.0, 40.0], 'D': [30.0, 50.0], 'E': [61.2, 33.8], 'F': [29.1, 36.4]}, index=[1,2])

df1输出:

A   B
1   3   4
2   6   7

df2输出:

C      D      E      F
1  20.0   30.0   61.2   29.1
2  40.0   50.0   33.8   36.4

期望结果

A      B
1      3      4
2      6      7
3      C      D    E    F
4    20.0   30.0   61.2   29.1
5    40.0   50.0   33.8   36.4

问题分析

常规的pd.concat()或pd.append()都是按列名对齐拼接,无法实现这种将df2的列名和数据作为独立行追加到df1后的效果。

解决方案

我们需要将所有数据转换为行列表,手动合并后重新生成DataFrame:

# 将df1的行转为列表
df1_rows = df1.values.tolist()
# 将df2的列名作为一行
df2_header = df2.columns.tolist()
# 将df2的行转为列表
df2_rows = df2.values.tolist()
# 合并所有行
all_rows = df1_rows + [df2_header] + df2_rows
# 生成新的DataFrame并设置连续索引
result = pd.DataFrame(all_rows, index=range(1, len(all_rows)+1))
# 给前两列保留原df1的列名,多余列自动命名
result.columns = list(df1.columns) + [f'Unnamed_{i}' for i in range(len(result.columns)-len(df1.columns))]

print(result)

输出结果:

A      B Unnamed_2 Unnamed_3
1      3      4       NaN       NaN
2      6      7       NaN       NaN
3      C      D         E         F
4    20.0   30.0      61.2      29.1
5    40.0   50.0      33.8      36.4

如果不需要多余列的自定义命名,也可以直接使用默认数字列名:

result = pd.DataFrame(all_rows, index=range(1, len(all_rows)+1))
print(result)

输出:

0     1      2      3
1       3     4    NaN    NaN
2       6     7    NaN    NaN
3       C     D      E      F
4    20.0  30.0   61.2   29.1
5    40.0  50.0   33.8   36.4

这种方式完全符合需求,将df2的列名和数据行作为独立行追加到df1末尾,不做列对齐。


内容的提问来源于stack exchange,提问作者PTTX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:33:38