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

Python日期列表按月分组可视化:是否需转DataFrame?求实现指引

按月统计日期数量并绘图的实现方法

是否需要转换为DataFrame?

不是必须,但借助pandas的DataFrame能大幅简化统计逻辑,且和绘图工具(如matplotlib)的兼容性更好,是更高效的选择。

方法一:不使用DataFrame(纯标准库+matplotlib)

用字典手动统计每月数据量,再绘图:

from datetime import datetime
import matplotlib.pyplot as plt

# 原始日期列表
my_original_list = ['December 1, 2003', 'February 22, 2004', 'February 29, 2004', 'March 8, 2004', 'December 25, 2003']

# 批量转换为datetime.date对象
new_list = [datetime.strptime(date_str, '%B %d, %Y').date() for date_str in my_original_list]

# 按月统计:用"年-月"作为唯一标识
month_counts = {}
for date in new_list:
    month_key = f"{date.year}-{date.month:02d}"  # 统一格式为YYYY-MM
    month_counts[month_key] = month_counts.get(month_key, 0) + 1

# 排序并准备绘图数据
sorted_months = sorted(month_counts.keys())
counts = [month_counts[month] for month in sorted_months]

# 绘制柱状图
plt.bar(sorted_months, counts)
plt.xlabel('月份')
plt.ylabel('日期数量')
plt.title('每月日期数量统计')
plt.xticks(rotation=45)  # 旋转标签避免重叠
plt.tight_layout()
plt.show()

方法二:使用DataFrame(推荐)

利用pandas的分组功能快速统计,代码更简洁:

from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt

# 原始日期列表
my_original_list = ['December 1, 2003', 'February 22, 2004', 'February 29, 2004', 'March 8, 2004', 'December 25, 2003']

# 转换为DataFrame
new_list = [datetime.strptime(date_str, '%B %d, %Y').date() for date_str in my_original_list]
df = pd.DataFrame({'date': new_list})

# 提取年-月并分组统计
df['year_month'] = df['date'].dt.strftime('%Y-%m')
month_stats = df.groupby('year_month').size().reset_index(name='count')

# 直接绘图
month_stats.plot(kind='bar', x='year_month', y='count', legend=False)
plt.xlabel('月份')
plt.ylabel('日期数量')
plt.title('每月日期数量统计')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

补充说明

  • 如果不需要区分年份,可将分组键改为月份名称(date.strftime('%B'))或月份数字(date.month);
  • 处理大量数据时,DataFrame方法的统计效率远高于手动遍历字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:35:28