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

如何基于datetime64类型日期绘制每日上传量直方图?

解决方案:构建每日上传数量直方图

核心思路

无需将日期转为非datetime类型,利用Pandas的时间序列工具按天统计上传量,再通过可视化工具生成直观的统计图表。

完整实现代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取并预处理数据:读取时直接解析日期列,避免重复转换
df = pd.read_csv(
    'query_result_2022-08-04T20_11_46.398221Z.csv',
    usecols=[9, 10],
    parse_dates=['Uploaded Date Time']
)
df.rename(
    {'Uploaded Date Time': 'uploadDate', 'Club Name': 'clubName'},
    axis=1,
    inplace=True
)

# 筛选目标俱乐部数据(注意:示例输出中俱乐部名称为`DM368-20220521`,需与实际数据匹配)
cruiseDates = df[df['clubName'] == 'DM368-20220521']

# 按天统计上传数量(推荐用resample,保留datetime索引,自动补全无数据的日期)
daily_uploads = cruiseDates.set_index('uploadDate').resample('D').size()

# 绘制可视化图表
plt.figure(figsize=(10, 6))
daily_uploads.plot(kind='bar')
plt.title('每日上传数量统计')
plt.xlabel('日期')
plt.ylabel('上传次数')
plt.xticks(rotation=45)  # 旋转日期标签避免重叠
plt.tight_layout()  # 自动调整布局
plt.show()

关键细节说明

  1. 日期解析优化:读取CSV时通过parse_dates参数直接将日期列解析为datetime类型,省去后续手动转换步骤。
  2. 按天统计的两种方式:
    • resample方法:将日期设为索引后,resample('D')按自然日分组,自动为无上传记录的日期填充0,保证时间序列连续性。
    • groupby方法:若不需要补全空日期,可使用cruiseDates.groupby(cruiseDates['uploadDate'].dt.date).size(),但结果索引为Python的date对象,绘图时日期格式处理稍繁琐。
  3. 可视化选择:柱状图(bar)比直方图(hist)更适合展示每日精确计数;若坚持用直方图,可将日期转换为ordinal数值后绘制:
    dates = cruiseDates['uploadDate'].dt.floor('D')
    plt.hist(dates, bins=daily_uploads.index)
    plt.gcf().autofmt_xdate()  # 自动旋转日期标签
    plt.show()
    

问题修正提示

你代码中query的俱乐部名称是DM1368-20220521,但示例输出中实际为DM368-20220521,需确保筛选条件与数据中的俱乐部名称完全匹配,否则会得到空结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:54:18