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

尝试垂直合并两个Pandas DataFrame未正常生效,求解决方法

Pandas垂直合并DataFrame出现大量NaN的解决方法

你的问题出在两个DataFrame的列名完全不匹配,Pandas的pd.concat()默认会按列名对齐数据,所以合并后各自的列只会在自身数据行有值,其余行自动填充NaN。

根据你的需求,分两种情况处理:

情况1:两个DataFrame的列数据是一一对应的

如果df2的clx/cly/clz分别对应df1的cl1/cl2/cl3,先重命名df2的列名,再执行垂直合并:

import pandas as pd
df1=pd.DataFrame()
df2=pd.DataFrame()
df1['cl1']=[1,2,3,4,5,3]
df1['cl2']=[2,3,4,5,6,3]
df1['cl3']=[5,4,3,2,1,4]

df2['clx']=[11,2,3,4,5]
df2['cly']=[22,3,4,5,6]
df2['clz']=[55,4,3,2,1]
df2['cla']=[66,4,3,2,1]

# 重命名df2的列,和df1对应列匹配(按需调整对应关系)
df2 = df2.rename(columns={'clx': 'cl1', 'cly': 'cl2', 'clz': 'cl3'})
# 垂直合并,ignore_index重置行索引
merged_df = pd.concat([df1, df2], ignore_index=True)
print(merged_df)

执行后结果会把df2的对应列数据直接追加到df1下方,非对应列(比如cla)会保留,df1的该行cla值为NaN。

情况2:只是单纯堆叠行,不考虑列名对应

如果不需要列名对齐,只想把df2的所有行直接加到df1后面,保留所有列,那你当前的结果其实就是正确的堆叠效果。但如果这不是你想要的,说明你需要先统一列名再合并。

另外,如果你不需要df2的额外列(比如cla),可以先删除再合并:

df2 = df2.drop(columns=['cla'])
# 重命名后合并
df2.columns = ['cl1', 'cl2', 'cl3']
merged_df = pd.concat([df1, df2], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:18:25