df.plot.hist() 默认 bins=10 易失真,应依数据特性选策略:整数变量用 range 精确分箱,大样本用 'fd' 或 bins=30;叠加时必设 alpha;kde 带宽影响平滑度,小样本用 'scott',大样本或偏态用 'silverman';plot.density() 是 plot.kde() 的别名,参数行为完全一致;所有绘图均返回 axes,需 plt.savefig() 和 plt.show() 才可见结果。

用 df.plot.hist() 画直方图时,为什么柱子数量总是不对?
默认柱数由 Pandas 自动估算(bins=10),但实际数据范围或样本量变化时,容易导致分布细节丢失或堆叠过密。关键不是改 bins 数值本身,而是结合数据特性选策略:
- 若想看粗略分布趋势,保留默认即可;
- 若变量是整数且取值有限(比如评分 1–5),用
bins=range(min_val, max_val+2)确保每个整数档位单独成柱; - 若样本量 > 1000,建议显式设
bins=30或bins='fd'(Freedman-Diaconis 规则),比默认更稳健; -
df.plot.hist(bins=20, alpha=0.7)中的alpha很重要——多列叠加时没它会完全遮盖底层。
用 df.plot.kde() 画密度曲线,带宽(bw_method)怎么选?
KDE 结果高度依赖带宽:太小 → 曲线毛刺、过拟合;太大 → 峰值被抹平、失真。Pandas 默认用 'scott',但实际中:
- 小样本(
n )慎用 KDE,优先直方图 + <code>density=True; - 若分布有明显双峰,尝试
bw_method=0.3手动压低带宽,暴露结构; - 想和直方图叠加验证,必须保证两者纵轴单位一致:
df.plot.hist(density=True, bins=30)+df.plot.kde(bw_method='silverman'); -
bw_method='silverman'比'scott'更保守,适合偏态数据。
用 df.boxplot() 画箱线图,如何避免异常值淹没主体?
默认会把所有离群点(outlier)单独标为小圆点,当数据含大量极端值时,图面杂乱、中位数/四分位距反而难识别:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 加参数
showfliers=False直接隐藏离群点,聚焦主体分布; - 若需保留异常信息,改用
df.plot(kind='box', sym='')(空字符串禁用符号); - 多列对比时,列名含空格或特殊字符会导致 x 轴标签错位——提前用
df.columns = df.columns.str.replace(' ', '_')清理; - 横向箱线图更省空间:
df.plot.box(vert=False),尤其列数 > 5 时。
为什么 df.plot.density() 和 df.plot.kde() 效果一样?
这是 Pandas 的别名机制:density 是 kde 的同义调用,底层完全复用相同逻辑,参数、返回对象、绘图行为无任何差异。唯一区别是语义:
-
df.plot.kde()强调“核密度估计”方法本身; -
df.plot.density()更侧重“绘制密度”这个动作; - 二者都接受
bw_method、ind(指定 x 轴点)、ax(复用坐标轴)等全部参数; - 别在同一个脚本里混用——易引发团队协作时的理解偏差,统一选一个即可。
真正容易被忽略的是:所有这些绘图方法返回的是 matplotlib.axes.Axes 对象,不是图片文件。要保存,必须显式调用 plt.savefig();要显示,得补一句 plt.show()。不写这两句,跑完代码什么也看不到。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










