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

合并两个无NaN值的DataFrame时出现NaN值问题

问题分析与解决方法

核心原因

join默认按索引对齐数据,你的两个DataFrame虽行数均为1699,但索引不匹配——X_train中有168条记录的索引在label_X_train里不存在,因此合并后这些行的label列自动填充为NaN;内连接仅保留索引匹配的行,所以得到1531条结果(1699-168)。

解决步骤

1. 重置索引后合并(行顺序一一对应时用)

如果两个DataFrame的行是按顺序一一匹配的(即X_train第i行对应label_X_train第i行),直接重置索引后合并即可保留全部1699条记录:

# 重置索引并丢弃原索引
X_train_reset = X_train.reset_index(drop=True)
label_X_train_reset = label_X_train.reset_index(drop=True)
finalTrain = X_train_reset.join(label_X_train_reset)

也可以用concat更直接:

finalTrain = pd.concat([X_train.reset_index(drop=True), label_X_train.reset_index(drop=True)], axis=1)

2. 定位缺失索引并处理(行顺序不对应时用)

如果行不是按顺序匹配的,先找出X_train中在label_X_train里缺失的索引:

# 找出X_train有但label_X_train没有的索引
missing_index = X_train.index.difference(label_X_train.index)
print("缺失的索引:", missing_index)

之后根据业务逻辑填充NaN(示例填充0,可按需调整):

finalTrain = X_train.join(label_X_train)
finalTrain = finalTrain.fillna(0)

3. 按位置强制合并(忽略索引)

如果确认两行是按位置一一对应,也可通过添加临时辅助列实现合并:

X_train['temp_id'] = range(len(X_train))
label_X_train['temp_id'] = range(len(label_X_train))
finalTrain = X_train.merge(label_X_train, on='temp_id', how='left').drop('temp_id', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:27:36