如何排除文本列解决plt.boxplot()运行失败问题
用箱线图和直方图检测异常值
执行plt.boxplot(df[col])时运行失败,核心原因是数据框的第8列为文本类型,箱线图仅支持数值型数据,因此需要先排除非数值型列再执行可视化。
以下是修复后的代码:
import matplotlib.pyplot as plt plt.figure(figsize=(15, 30)) i = 0 # 自动筛选数据框中的数值型列,排除文本等非数值类型列 numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns for col in numeric_cols: i += 1 plt.subplot(9, 4, i) plt.boxplot(df[col]) plt.title(f'{col}', fontsize=9) plt.hist(df[col]) plt.suptitle('异常值检测', fontsize=16, verticalalignment='top', horizontalalignment='center', fontweight='bold') plt.savefig('charts/Detect_Outlier_Plots.png', dpi=None, facecolor='w', edgecolor='g', orientation='portrait', format=None, transparent=False, bbox_inches=None, pad_inches=0.0, metadata=None) plt.show()
关键修改说明:
- 通过
df.select_dtypes(include=['int64', 'float64'])自动筛选数值型列,无需手动定位第8列,适配列结构变化的场景 - 将全局标题改为中文
异常值检测,更贴合中文使用习惯 - 保留原代码的子图布局、图表保存等核心逻辑,仅针对数据类型问题做针对性修复
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

