最近收到一个求助邮件,他的需求如下:
我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮!
这个问题其实比较简单,做出来的最终形式如下:
主要涉及格式转换和分组统计的需求,那么我们就开始一步一步的完成这一次的任务。
1、读入excel文件import pandas as pdfile_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 dtnow = dt.datetime.today().yeardata['周岁'] = 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'}).Tage_single_group.index = ['合计']
仅女生数据
age_single_female = data[data['性别'] == '女'].groupby(['周岁'])age_single_female_group = age_single_female.agg({'学生姓名':'count'}).Tage_single_female_group.index = ['仅女生']
合并数据
age_union = pd.concat([age_single_group,age_single_female_group],join='outer')age_union.fillna(0)
输出:
这样就完成了年级的分组统计,其他的按年级分组,或者地区分组也是类似的。是不是一步步写过来感觉pandas特别好用,特别简单。
- END -
文源网络,仅供学习之用,如有侵权,联系删除。往期精彩◆ 50款开源工具你都用过吗?
◆ python+C、C++混合编程的应用
◆ python网络爬虫的基本原理详解
◆ Python自动操控excel,一小时解决你一天的工作
◆ 如何用Python增强Excel,减少处理复杂数据的痛苦?