看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
2020 年新冠肺炎疫情期间,“北京发布”微信公众号每天会发布北京市上一日疫情数据,其中会介绍全市 16 区无报告病例天数情况。原始数据如下:
# 北京各区最后一例确诊日期
'''
地区 最后一例确诊日期
顺义区 2020-02-08
平谷区 Nan
昌平区 2020-08-06
大兴区 2020-06-30
密云区 2020-02-11
石景山区 2020-06-14
海淀区 2020-06-25
东城区 2020-06-16
门头沟区 2020-06-15
房山区 2020-06-15
延庆区 2020-01-23
怀柔区 2020-02-06
朝阳区 2020-06-21
西城区 2020-06-22
通州区 2020-06-20
丰台区 2020-07-05
'''
首先读取数据:
import pandas as pd
df = pd.read_clipboard()
df.head()
'''
地区 最后一例确诊日期
0 顺义区 2020-02-08
1 平谷区 Nan
2 昌平区 2020-08-06
3 大兴区 2020-06-30
4 密云区 2020-02-11
'''
接着增加一列统计天数。先将确诊日期转换为时间类型,进行缺失值处理,接着与当天时间相减计算出天数:
(
df.replace('Nan', pd.NaT) # 将缺失值转为空时间
# 将确诊日期转为时间格式
.assign(最后一例确诊日期=lambda x: x['最后一例确诊日期'].astype('datetime64[ns]'))
# 增加无报告病例天数列,当日与确诊日期相减
.assign(无报告病例天数=lambda x: pd.Timestamp('2020-11-16')-x['最后一例确诊日期'])
# 计算出天数
.assign(无报告病例天数=lambda x: x['无报告病例天数'].dt.days)
# 排序,空值在前,重排索引
.sort_values('无报告病例天数', ascending=False, na_position='first', ignore_index=True)
)
'''
地区 最后一例确诊日期 无报告病例天数
0 平谷区 NaT NaN
1 延庆区 2020-01-23 298.0
2 怀柔区 2020-02-06 284.0
3 顺义区 2020-02-08 282.0
4 密云区 2020-02-11 279.0
5 石景山区 2020-06-14 155.0
6 门头沟区 2020-06-15 154.0
7 房山区 2020-06-15 154.0
8 东城区 2020-06-16 153.0
9 通州区 2020-06-20 149.0
10 朝阳区 2020-06-21 148.0
11 西城区 2020-06-22 147.0
12 海淀区 2020-06-25 144.0
13 大兴区 2020-06-30 139.0
14 丰台区 2020-07-05 134.0
15 昌平区 2020-08-06 102.0
'''
最后还可以将结果进行迭代操作形成文字,方便在公众号中发布。
(完)
注:此案例收录在《深入浅出Pandas:利用Python进行数据处理与分析》17.2.7 小节。
更新时间:2024-08-18 16:13:36 标签:pandas python 疫情 北京