最近收到一个求助邮件,他的需求如下:
我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮!
这个问题其实比较简单,做出来的最终形式如下:
主要涉及格式转换和分组统计的需求,那么我们就开始一步一步的完成这一次的任务。
1、读入excel文件
import pandas as pd
file_name = r'学生信息表.xlsx'
data = pd.read_excel(file_name)
data
输出:
2、处理出生日期,转化为时间格式
这次我们用pandas自带的to_datetime函数,好用快捷。
data['出生日期'] = pd.to_datetime(data['出生日期'],format='%Y%m%d')
3、增加一列年龄
引入datetime包,根据当前时间的year减去出生日期得到。
import datetime as dt
now = dt.datetime.today().year
data['周岁'] = now - data['出生日期'].dt.year
输出:
4、对周岁、性别同时分组
熟悉教程的小伙伴知道,这一期的分组内容其实可以用pandas的透视表pivot_table函数解决。
这次我们就用另一种方法:groupby函数同样能搞定。
#开始分组统计
age = data.groupby(['周岁','性别'])
age_group = age.agg({'学生姓名':'count'}).T
输出:
5、如果需要求和数据
a.我们可以先对所有数据进行分组统计一次
b.再单独对女生数据统计一次
c.最后把两次的统计数据合并起来
合并分组
age_single = data.groupby(['周岁'])
age_single_group = age_single.agg({'学生姓名':'count'}).T
age_single_group.index = ['合计']
仅女生数据
age_single_female = data[data['性别'] == '女'].groupby(['周岁'])
age_single_female_group = age_single_female.agg({'学生姓名':'count'}).T
age_single_female_group.index = ['仅女生']
合并数据
age_union = pd.concat([age_single_group,age_single_female_group],join='outer')
age_union.fillna(0)
输出:
这样就完成了年级的分组统计,其他的按年级分组,或者地区分组也是类似的。是不是一步步写过来感觉pandas特别好用,特别简单。
文源网络,仅供学习之用,侵删。
在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会! https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》
关注公众号【Python圈子】,优质文章每日送达。
来源:oschina
链接:https://my.oschina.net/u/4477231/blog/3740044