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

Python绘制含缺失日期的每周患病人数柱状图方法求助

补全日期、统计患病人数并绘制柱状图

步骤1:导入库并修正日期格式

首先导入必要工具库,同时修正原始数据的日期格式(原始代码里的日期未加引号会被识别为数字,必须改为字符串):

import pandas as pd
import matplotlib.pyplot as plt

# 用户输入的结束日期(需为字符串格式)
end_date = '2022-10-18'
# 原始数据集
data = {'Date': ['2022-10-14', '2022-10-14', '2022-10-14', '2022-10-15', '2022-10-16', '2022-10-16', '2022-10-17'],
        'Location': ['Lion House', 'Lion House', 'Lion House', 'Lion House', 'Lion House', 'Lion House', 'Lion House']}
df = pd.DataFrame(data)

# 将Date列转为pandas可识别的日期类型
df['Date'] = pd.to_datetime(df['Date'])

步骤2:统计每日患病人数

用groupby按日期分组,统计每组的行数(即当日患病人数):

# 按日期分组,统计每日患病数
daily_counts = df.groupby('Date').size().reset_index(name='Count')

步骤3:生成完整一周的日期范围

根据输入的结束日期,生成包含结束日期及前6天的完整日期序列:

# 将结束日期转为日期类型
end_date_dt = pd.to_datetime(end_date)
# 生成从结束日期往前推6天到结束日期的完整日期范围
date_range = pd.date_range(start=end_date_dt - pd.Timedelta(days=6), end=end_date_dt)
# 转为DataFrame格式
full_dates = pd.DataFrame({'Date': date_range})

步骤4:合并数据并补全缺失日期的计数

将完整日期序列和统计结果合并,缺失日期的患病数填充为0:

# 左合并保留所有完整日期,缺失的Count值用0填充
df_transform = pd.merge(full_dates, daily_counts, on='Date', how='left')
df_transform['Count'] = df_transform['Count'].fillna(0).astype(int)

此时df_transform就是你需要的包含完整一周日期和对应患病数的数据集。

步骤5:绘制柱状图

用matplotlib绘制柱状图,将固定地点设为图表标题:

# 设置图表风格
plt.style.use('seaborn-v0_8')

# 绘制柱状图,x轴显示格式化后的日期
plt.bar(df_transform['Date'].dt.strftime('%Y-%m-%d'), df_transform['Count'], color='#2ecc71')

# 设置图表标题和标签
location = 'Lion House'
plt.title(f'{location} 一周患病人数统计', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('患病人数', fontsize=12)

# 旋转x轴标签避免重叠
plt.xticks(rotation=45)
# 调整布局防止标签被截断
plt.tight_layout()

# 显示图表
plt.show()

完整可运行代码

import pandas as pd
import matplotlib.pyplot as plt

# 用户输入的结束日期
end_date = '2022-10-18'
# 原始数据集
data = {'Date': ['2022-10-14', '2022-10-14', '2022-10-14', '2022-10-15', '2022-10-16', '2022-10-16', '2022-10-17'],
        'Location': ['Lion House', 'Lion House', 'Lion House', 'Lion House', 'Lion House', 'Lion House', 'Lion House']}
df = pd.DataFrame(data)

# 转换日期格式
df['Date'] = pd.to_datetime(df['Date'])

# 统计每日患病数
daily_counts = df.groupby('Date').size().reset_index(name='Count')

# 生成完整一周日期范围
end_date_dt = pd.to_datetime(end_date)
date_range = pd.date_range(start=end_date_dt - pd.Timedelta(days=6), end=end_date_dt)
full_dates = pd.DataFrame({'Date': date_range})

# 合并并补全缺失值
df_transform = pd.merge(full_dates, daily_counts, on='Date', how='left')
df_transform['Count'] = df_transform['Count'].fillna(0).astype(int)

# 绘制柱状图
plt.style.use('seaborn-v0_8')
plt.bar(df_transform['Date'].dt.strftime('%Y-%m-%d'), df_transform['Count'], color='#2ecc71')

location = 'Lion House'
plt.title(f'{location} 一周患病人数统计', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('患病人数', fontsize=12)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:25:17