如何将测试集二分类预测标签y写入含ID列的CSV文件及解决ValueError报错
解决ValueError: Data must be 1-dimensional并生成指定格式CSV
问题根源
你遇到的报错核心原因是:y_pred是二维数组(输出显示形状为(1, 20000)),而pandas构造DataFrame时,每一列要求传入一维数据,二维数组不符合这个要求,所以触发了ValueError。
解决方案:将预测结果转为一维数组
只需要把二维的预测结果展平成一维即可,这里提供几种简单可靠的方法:
方法1:用reshape(-1)自动适配形状
reshape(-1)会根据数组的总元素数自动调整维度,不管原数组是(1,20000)还是(20000,1),都会转换成一维的(20000,)数组:
import numpy as np import pandas as pd # 处理预测结果 y_pred = classifier.predict(X_test) y_pred = (y_pred > 0.5).astype(int) # 展平为一维数组 y_pred_flat = y_pred.reshape(-1) # 构造DataFrame并保存到CSV result = pd.DataFrame({ 'Id': test['Id'].values, 'Default': y_pred_flat.astype(np.int32) }) result.to_csv("1.csv", index=False) print(result.head(10))
方法2:用squeeze()去除多余维度
squeeze()专门用来删除数组中长度为1的维度,刚好适合把(1,20000)这类行向量转成一维数组:
# 替代展平步骤的代码 y_pred_squeezed = y_pred.squeeze() # 后续构造DataFrame和保存代码与方法1一致
方法3:用flatten()直接展平
flatten()是最直观的多维数组转一维的方法,效果和前两种一致:
# 替代展平步骤的代码 y_pred_flattened = y_pred.flatten()
验证结果
运行代码前可以先通过print(y_pred_flat.shape)确认数组形状是(20000,),确认后再构造DataFrame就不会报错了。最终生成的CSV会包含Id和Default两列,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Hermi
相关产品推荐
相关产品推荐

