自定义seaborn绘图函数应用于特征列表时for循环报错如何解决
问题排查与解决方案
- 首先确认生成特征列表的逻辑是否正确
你生成categorical_columns使用的代码是raw[categorical].columns.tolist(),需先检查两处规则:categorical必须是包含所有目标分类特征名称的列表/布尔掩码,如果是单个列名字符串,raw[categorical]会返回Series对象,没有columns属性,这一步本身就会报错;- 输出的特征列表需均为存在于
raw中的有效离散分类特征,没有空值、非法字符、重复列名,否则传入函数的feature参数异常会直接触发报错。
可先运行如下代码核验:
print(categorical_columns) - 修复绘图后未清空画布的问题
你当前的函数单次调用运行正常,但循环调用时会不断累积画布对象占用资源,大概率会触发内存/渲染异常,需在函数末尾新增清空画布的逻辑:def barplotter (dataset, feature): ax1 = sns.displot(dataset, x =feature, stat = 'density', discrete = True, color = 'black') ax1.set(title=feature, xlabel = "") ax2 = sns.displot(dataset, x =feature, col = 'status_group', stat = 'density', discrete = True) ax2.set(xlabel = "") plt.show() plt.close('all') # 新增此行,清空所有已生成的画布资源 - 定位异常特征
如果修改后仍然报错,可以在循环中增加异常捕获逻辑,直接定位是哪个特征触发的问题:
输出的错误信息可以帮你快速定位问题,比如某特征为连续数值型不符合for item in categorical_columns: try: barplotter(raw, item) except Exception as e: print(f"特征{item}处理失败,错误信息:{e}")discrete=True的要求、某特征全为缺失值、status_group在某特征的分组下无数据等。
内容的提问来源于stack exchange,提问作者brenda89
相关产品推荐
相关产品推荐

