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

Pandas使用concat纵向拼接DataFrame出现NaN值问题修复

问题原因

pandas 执行axis=0纵向拼接时,是严格按照列名的取值和数据类型双维度匹配对齐的,不会自动做隐式类型转换。
从异常输出可以判断:两个DataFrame中名为0/1/2的三列,列名的数据类型不一致——一个DataFrame的这三个列名是整数类型(int),另一个的这三个列名是字符串类型(str),打印时肉眼看起来显示效果完全相同,但对pandas来说属于完全不同的列。只有data_label列在两个DataFrame中列名的取值、类型完全一致,所以只有这一列能正常对齐,其余不匹配的列在对应行就会被填充为NaN,最终出现重复列+大量空值的现象。

验证方法

拼接前执行以下代码,查看两个DataFrame的列名类型即可确认问题:

print("leakage_data1列名类型:", leakage_data1.columns.dtype)
print("noise_data1列名类型:", noise_data1.columns.dtype)

输出结果会显示一个为整数类型(如int64),一个为对象/字符串类型(如object)。

修复方案

拼接前先把两个DataFrame的列名统一为相同数据类型即可,以统一转为整数类型为例:

# 统一列名类型
leakage_data1.columns = leakage_data1.columns.astype(int)
noise_data1.columns = noise_data1.columns.astype(int)

# 再执行原有拼接逻辑
model1_TestData = pd.concat([leakage_data1, noise_data1], axis=0, ignore_index=True)

如果业务上需要列名为字符串类型,把上面的astype(int)替换为astype(str)即可。
拼接后的正确输出如下:

0    1    2  data_label
0  0.2  0.1  0.7           0
1  0.5  0.6  0.4           0
2  0.9  0.8  1.0           1
3  0.7  0.5  0.1           1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:27:30