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

Pandas列拼接问题:索引不一致的DataFrame合并求助

嘿,我来帮你搞定这个DataFrame拼接的问题!首先你写的pd.concat(df1,df2,axis=1)本身就有个小错误——pd.concat的第一个参数得是包含DataFrame的列表,正确的基础写法应该是pd.concat([df1, df2], axis=1)。不过即使修正了这个,如果两个DataFrame的索引不一致,默认会按索引对齐,结果里可能会出现很多NaN,这应该不是你想要的对吧?

下面根据不同的需求给你几种解决方案:

情况1:按行位置直接拼接(完全忽略索引)

如果你想要的是不管两个表的索引是什么,直接把第一行和第一行拼、第二行和第二行拼,那先把两个DataFrame的索引重置掉再拼接就行:

# 重置索引,drop=True是为了不保留原来的索引列
df1_reset = df1.reset_index(drop=True)
df2_reset = df2.reset_index(drop=True)
df3 = pd.concat([df1_reset, df2_reset], axis=1)

情况2:基于某一列对齐拼接(不用索引)

要是你想基于两个表里共同的某一列(比如叫id或者key)来对齐数据,那用pd.merge会更合适:

# 只保留两边都有匹配值的行(内连接)
df3 = pd.merge(df1, df2, on='共同列名', how='inner')

# 保留所有行,没有匹配的地方补NaN(外连接)
df3 = pd.merge(df1, df2, on='共同列名', how='outer')

# 保留df1的所有行,df2没有匹配的补NaN(左连接)
df3 = pd.merge(df1, df2, on='共同列名', how='left')

情况3:保留某一方的索引并对齐

如果希望保留其中一个DataFrame的索引,另一个表按这个索引来对齐,那用join方法更直观:

# 保留df1的索引,把df2按索引拼过来,没有匹配的补NaN
df3 = df1.join(df2, how='left')

# 保留df2的索引,用右连接
df3 = df1.join(df2, how='right')

# 保留所有索引,缺失值补NaN
df3 = df1.join(df2, how='outer')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:29:39