pandas传入set作为索引器触发FutureWarning的原因及解决方法
警告触发原因
- 核心问题是传入pandas DataFrame做列索引的
predictors是set(集合)类型:定义特征列时用了集合差集运算set(new_df.columns) - set([target]),返回值是无序的集合对象。 - pandas新版本已经弃用直接传入集合作为列索引器的写法:集合的无序性会导致选中的列顺序不可控,当前版本仅弹出FutureWarning提示,后续pandas版本会直接抛出错误,官方要求使用有序的列表类型作为索引参数。
- 警告触发的具体位置就是
print(new_df[predictors].head())这一行,方括号内传入集合做列选择的写法不符合新版本规范。
修复方案
只需要将集合类型的特征列结果显式转换为列表即可,原有业务逻辑不需要改动:
- 最简修改方式,把原有的特征定义行替换为:
predictors = list(set(new_df.columns) - set([target]))
- 如果需要保持特征列和原DataFrame的列顺序完全一致(避免集合无序打乱列顺序,更适合模型训练场景),推荐用列表推导的写法:
target = 'deposit' predictors = [col for col in new_df.columns if col != target]
修改后再执行列选择操作就不会再弹出该警告,同时代码可以兼容未来版本的pandas。
内容的提问来源于stack exchange,提问作者David manga
相关产品推荐
相关产品推荐

