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

如何对列不同或列数同列名异的Pandas DataFrame进行行绑定?

嘿,这两个都是Pandas日常操作里很常见的拼接需求,我给你拆解清楚:

问题1:列不同的两个Pandas DataFrame行绑定

要实现列不同的DataFrame垂直行绑定,最直接的方法就是用pd.concat()函数,它默认会采用**外连接(outer join)**的方式处理不同列——也就是保留所有列,缺失的部分用NaN填充。

举个实际例子:

import pandas as pd

# 创建两个列不同的DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'B': [5, 6], 'C': [7, 8]})

# 执行行绑定,ignore_index=True用来重置行索引,避免重复
combined_df = pd.concat([df1, df2], axis=0, ignore_index=True)

运行后combined_df的结果是:

ABC
013NaN
124NaN
2NaN57
3NaN68

如果只需要保留两个DataFrame共有的列,可以把join参数设为'inner',这样就只会保留重叠的列(比如上面例子里的B列)。


问题2:列数相同但列名不同的垂直绑定

这种情况分两种场景,取决于你想要的拼接逻辑:

场景1:按列的位置拼接(不管列名,第一列拼第一列)

如果两个DataFrame的列数相同,且你希望忽略列名,直接按位置对应拼接,最稳妥的方法是先把第二个DataFrame的列名改成和第一个一致,再执行concat:

import pandas as pd

df1 = pd.DataFrame({'X': [1, 2], 'Y': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 把df2的列名替换成df1的列名
df2.columns = df1.columns

# 执行垂直绑定
combined_df = pd.concat([df1, df2], ignore_index=True)

结果会是:

XY
013
124
257
368

场景2:按列的含义拼接(指定列名映射)

如果列名不同但含义对应(比如df1的X对应df2的A,Y对应B),可以手动指定列名映射后再拼接:

# 自定义列名映射
column_mapping = {'A': 'X', 'B': 'Y'}
df2_renamed = df2.rename(columns=column_mapping)

# 拼接
combined_df = pd.concat([df1, df2_renamed], ignore_index=True)

这样就能精准对应你想要的列含义,避免拼接错误。

注意:如果直接不修改列名就执行concat,会因为列名不同而保留所有列,结果会出现大量NaN,这通常不是我们想要的垂直绑定效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:17:34