赞
踩
前言
我又来回复大家的邮件啦!因为这次清明回家不方便录视频,这次以文章的形式发出来,欢迎大家多提意见。这次的需求:
需求描述
我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮!
最终形式
最终的格式类似于上表,主要涉及格式转换和分组统计的需求,那么我们就开始一步一步的完成这一次的任务。
编码
读入excel文件
import pandas as pd
file_name = r'学生信息表.xlsx'
data = pd.read_excel(file_name)
data
输出:
读入数据
处理出生日期,转化为时间格式,这次我们用pandas自带的to_datetime函数,好用快捷。
data['出生日期'] = pd.to_datetime(data['出生日期'],format='%Y%m%d')
增加一列年龄,引入datetime包,根据当前时间的year减去出生日期得到。
import datetime as dt
now = dt.datetime.today().year
data['周岁'] = now - data['出生日期'].dt.year
输出:
新加周岁列
对周岁、性别同时分组,熟悉教程的小伙伴知道,这一期的分组内容其实可以用pandas的
透视表pivot_table函数解决。
在微信账单分析那期视频(
pandas透视表视频教程
)中有详细的讲解,这次我们就用另一种方法:groupby函数同样能搞定。
#开始分组统计
age = data.groupby(['周岁','性别'])
age_group = age.agg({'学生姓名':'count'}).T
输出:
周岁,性别分组结果
如果需要求和数据,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)
输出:
统计2
总结
这样就完成了年级的分组统计,其他的按年级分组,或者地区分组也是类似的。是不是一步步写过来感觉pandas特别好用,特别简单。
欢迎大家有任何问题发邮箱492545607@qq.com进行交流,最后我们一起喊一遍口号:
提高办公效率,python改变生活
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。