pandas
python
疫情
北京
看过来
《pandas 教程》 持续更新中,可作为 pandas 入门进阶课程、pandas 中文手册、用法大全,配有案例讲解和速查手册。提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。查看更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《深入浅出Pandas:利用Python进行数据处理与分析》(ISBN:9787111685456)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
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 小节。