使用np.delete删除Pandas DataFrame行报形状不匹配错误如何解决
问题原因
- 核心错误是混用了Pandas对象和Numpy操作函数:
X_raw、y_raw是Pandas的DataFrame和Series类型,np.delete会先将其转为Numpy数组处理,返回的结果也是Numpy数组,和原Pandas对象的索引结构不匹配,因此触发维度报错。 - 额外隐患:
np.random.randint是有放回抽样,可能生成重复的索引值,导致实际提取的训练样本数少于3、删除行数不符合预期。 - 对
training_indices做reshape操作完全不解决问题,错误和索引的形状无关。
解决方案
方案1:使用Pandas原生方法操作(最稳妥,无类型兼容问题)
首先将抽样逻辑改为无放回抽样,避免重复索引:
# 无放回抽取3个不重复的索引 training_indices = np.random.choice(len(X_raw), size=3, replace=False) # 提取训练集 X_training = X_raw.iloc[training_indices] y_training = y_raw.iloc[training_indices] # 直接用drop删除对应行得到非训练集 X_pool = X_raw.drop(training_indices, axis=0) y_pool = y_raw.drop(training_indices, axis=0)
方案2:转为Numpy数组后再用Numpy函数操作
如果需要得到Numpy数组类型的非训练集,可以先提取Pandas对象的底层值再操作:
X_pool = np.delete(X_raw.values, training_indices, axis=0) y_pool = np.delete(y_raw.values, training_indices, axis=0)
内容的提问来源于stack exchange,提问作者TheAfg
相关产品推荐
相关产品推荐

