You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DataFrame.plot.hist与Series.plot.hist绘制直方图结果不一致

为什么两个直方图显示结果不同?

数据可从加州大学欧文分校机器学习数据库下载。

用户代码:

import pandas as pd
i_94 = pd.read_csv('./Downloads/Guided_Project_ Finding_Heavy_Traffic_Indicators_on I-94/Metro_Interstate_Traffic_Volume.csv')
import matplotlib.pyplot as plt
%matplotlib inline # for my Jupyter notebook
i_94.plot.hist(column='traffic_volume', bins=10)
traffic_volume = i_94['traffic_volume']
traffic_volume.plot.hist(bins=10)

问题:我认为两者绘制的是同一列数据,直方图应该完全相同,但实际显示结果不同(见下图:上方为DataFrame绘制的直方图,左侧柱子高度明显高于下方Series绘制的直方图,两者y轴刻度范围不同)。

原因分析

核心问题出在旧版本pandas中DataFrame.plot.hist()的column参数行为异常:

  • 调用i_94.plot.hist(column='traffic_volume', bins=10)时,该版本的pandas没有正确识别column参数,导致绘图函数默认对DataFrame中所有数值列(比如temp、rain_1h、snow_1h、traffic_volume等)绘制直方图,且默认以重叠方式展示。
  • 其他数值列(如rain_1h、snow_1h存在大量0值)的直方图会和traffic_volume的直方图重叠,使得左侧柱子的高度是多列计数的叠加,因此看起来比单独绘制traffic_volume列的直方图(第二个图)更高。

解决方法

  • 明确选择目标列:改用i_94[['traffic_volume']].plot.hist(bins=10),通过切片生成仅包含目标列的DataFrame,确保只绘制该列的直方图。
  • 升级pandas版本:新版本的pandas已修复column参数的问题,升级后i_94.plot.hist(column='traffic_volume', bins=10)会正确只绘制指定列。

快速加载示例数据的代码:

import pandas as pd
import requests

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00492/Metro_Interstate_Traffic_Volume.csv.gz'

file = 'Metro_Interstate_Traffic_Volume.csv.gz'

content = requests.get(url).content
with open(file, 'wb') as f:
    f.write(content)

i_94 = pd.read_csv(file, compression='gzip')

内容的提问来源于stack exchange,提问作者Gwater17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:22:26