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

如何用Pandas绘制日期直方图?现有方法生成的是柱状图

嘿,这个问题我之前折腾过好几次!其实不用非得把年份转成数值数组,pandas和matplotlib本身就有处理日期直方图的简便路子,咱们来唠唠几种实用方法:

方法1:用pandas重采样+柱状图模拟日期直方图(最贴合需求)

日期直方图的核心就是按时间区间统计频次,咱们可以先对日期列按想要的时间粒度(年、月、日等)重采样,统计每个区间的数量,再画柱状图——这其实就是标准的日期直方图了:

import pandas as pd
import matplotlib.pyplot as plt

# 先确保日期列是datetime类型(这步很重要!)
df['date_col'] = pd.to_datetime(df['date_col'])

# 按年重采样,统计每年的记录数
yearly_counts = df['date_col'].resample('Y').count()

# 绘制图表,这就是按年的日期直方图
yearly_counts.plot(kind='bar')
plt.xlabel('年份')
plt.ylabel('记录数量')
plt.title('日期分布直方图(按年统计)')
plt.show()

这里的'Y'可以换成其他时间频率:比如'M'是按月统计,'D'是按天,'Q'是按季度,完全根据你的需求调整就行。

方法2:直接用matplotlib绘制日期直方图

matplotlib其实支持直接对datetime类型的数据绘制直方图,你只需要指定时间区间作为bins就好:

import matplotlib.pyplot as plt
import pandas as pd

df['date_col'] = pd.to_datetime(df['date_col'])

# 生成时间区间作为直方图的bins,比如按10年分一个区间
bins = pd.date_range(start=df['date_col'].min(), end=df['date_col'].max(), freq='10Y')

plt.hist(df['date_col'], bins=bins)
plt.xlabel('日期')
plt.ylabel('记录数量')
plt.title('日期分布直方图')
plt.xticks(rotation=45)  # 旋转日期标签,避免重叠
plt.show()

这样画出来的就是真正意义上的直方图,matplotlib会自动处理日期刻度的显示和区间内的频次统计。

方法3:提取时间成分绘制数值直方图(最直观的兜底方案)

如果上面两种方法都不符合你的预期,也可以直接提取年份(或月份、季度)转成数值,再画普通直方图:

import pandas as pd
import matplotlib.pyplot as plt

df['date_col'] = pd.to_datetime(df['date_col'])
# 提取年份列
df['year'] = df['date_col'].dt.year

# 绘制年份的直方图,bins可以指定数量或自定义区间
plt.hist(df['year'], bins=10)
plt.xlabel('年份')
plt.ylabel('记录数量')
plt.title('年份分布直方图')
plt.show()

总结一下:

  • 要是想要严格按时间区间的直方图,方法1和2都很简便,不需要手动转换数值;
  • 要是只关注单一时间维度(比如年份)的分布,方法3最直接好理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:12:44