热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonconcat函数多张表_零基础python数据分析(三)快速统计

温馨提示:为了更好地食用本教程,你可以只浏览加粗黑字,防止沉迷在笔者废话的海洋中。在excel中,对于一个表格,

温馨提示:为了更好地食用本教程,你可以只浏览加粗黑字,防止沉迷在笔者废话的海洋中。16dd1267a9546e05a24c9c5fcbdbd6d5.png16dd1267a9546e05a24c9c5fcbdbd6d5.png

在excel中,对于一个表格,最常用的操作,可能就是对某一行求和,求平均,对数据进行一些统计性的运算,接下来,就让我们用python来进行这些基本操作,并展示一下python的魅力!优雅、快速、高效23331197f6eff5e01a6ed93afeff83d3.png23331197f6eff5e01a6ed93afeff83d3.png23331197f6eff5e01a6ed93afeff83d3.png

要进行这些操作演示,当然是需要自己准备一些数据咯,可是数据从哪里来?既然没有现成的,那我们就自己造一个,你以为我会用excel去填一个表格出来吗?no!no!no!既然我们都在学习python了,当然是用python快速生成啦。

当然以下的代码比较超前,你可以不用费尽心思理解,我也不会出半分力讲解,你尽管体验伸手党的乐趣吧!

新建一个python的文件,复制下面的代码并运行

应该还没忘记怎么创建,怎么运行吧?打开jupyter,在弹出来的网页右上角点击new,点击python3……

老奶奶般的叮嘱:每一行代码前的空格也不要忘了复制,不然代码会运行不了的!最好就是鼠标从第一行选到最后一行!

然后是把最后一行的引号中的路径改一改,你想要将这个生成的excel存到哪,就改到哪。

即:

generate_score_excel(r'D:\成绩.xlsx'

改为:

generate_score_excel(r'你自己的路径\文件名.xlsx')

当然,你要是不改的话,它默认就是在D盘了,你自己可以去可以打开看看~

(为了各位童鞋运行不出错,我真是费尽心思,心疼自己两秒,小声BB41dcb15652daabd2b0af0f65d3346bc8.png41dcb15652daabd2b0af0f65d3346bc8.png)

import pandas as pdimport numpy as npimport redef generate_score_excel(path): # 随机姓名表 surnames = list('赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜') names = """供、侃、刻、卦、固、坤、姑、官、冈、庚、快、抗、昆、果、空、亟、其、具、券、卷、奇、委、季、宜、居、 届、岢、岸、杰、佳、京、侄、佳、来、例、制、到、兔、两、典、卷、周、呢、坦、奈、妮、宙、定、居、屉、帖、底、店、 征、忝、忠、念、技、投、政、枝、东、林、汰、决、玖、知、的、直、纠、金、两、乳、侏、佰、侗、佻、佬、具、冽、卓、 拈、妲、妯、宕、岱、岭、帖、帙、底、抒、林、杼、沓、炉、竺、长、依、侑、味、夜、委、宜、宛、岳、岸、岩、往、亚、 武、於、易、昂、旺、沅、沃、汪、物、艾、卧、佯、儿、咏、抑、昀、炎、杳、事、享、侍、使、侈、然、刹、刺、协、卒、 洽、沁、取、受、步、垂、奇、始、炊、姓、妻、妾、尚、屈、弦、所、承、昌、升、昔、松、欣、沙、沈、社、舍、炊、采、 长、青、幸、亟、徇、佳、舍、儿、争、其、刷、券、制、效、卷、姐、姒、姗、季、炙、宗、届、岫、征、承、昔、析、枕、 状、八、并、佩、函、和、命、坡、坪、奉、孟、帛、水、府、佛、彼、忽、或、戽、房、扮、枇、扶、放、昏、朋、服、明、 杭、杯、枚、板、沛、沐、汾、版、牧、虎、门、阜、杷、盲、非""".split('、') names = list(filter(lambda x: re.match(r'[\u4e00-\u9fa5]', x), names)) # 生成随机姓名 choice_surname = np.random.choice(surnames, 1000, replace=True) choice_name1 = np.random.choice(names, 1000, replace=True) name = np.char.add(choice_surname, choice_name1) # 生成随机年龄 age = np.random.choice(list(range(15, 30)), 1000) # 生成随机性别 sex = np.random.choice(['男', '女'], 1000) # 生成随机成绩 score1 = np.random.choice(list(range(60, 101)), 1000) score2 = np.random.choice(list(range(60, 101)), 1000) score3 = np.random.choice(list(range(60, 101)), 1000) # 生成表格 df = pd.DataFrame({'姓名': name, '年龄': age, '性别': sex, '数学': score1, '语文': score2, '英语': score3}) df.to_excel(path) print('表格生成成功!') generate_score_excel(r'D:\成绩.xlsx')

然后,还记得怎么运行吧?没错,就是在上一篇文章的最后提到的,选中这个代码所在的cell,按下Shift+Enter(回车),当然你也可以点击上方菜单中的cell下的run cells,都可以。

当你看到你的cell下方出现这样的结果时,说明你的数据已经生成完毕了!激动吗?兴奋吗?感动吗?

23d767d70829273ae6f1b7fc77c22b10.png

接下来,就让我们利用这份数据,来做一些基本的统计操作吧!

创建一个新的cell,我们开启接下来的旅程,应该还没忘记怎么插入新的cell吧?按下ESC,将cell左侧变为蓝色,按下B键,奇迹出现啦!下面出现了一个新的cell(框)7ddd34529e99d7a74497d8b52ac57cf2.png

然后,让我们动动手指,敲一敲下面的两行代码并运行:

import pandasdf = pandas.read_excel(r'D:\成绩.xlsx')df

还记得吧,这就是读取excel的代码,要用python对excel进行处理,那当然先要把它读取过来。

(如果前面路径有修改的话,这里的路径也要记得改哦!)

然后,你就会看到我们生成数据的庐山真面目:

(温馨提示:数据当然不会一模一样,因为每一条数据都是随机生成的)

a4260e05ee0f2ed49794f58245faaf83.png

接下来,让我们来统计一下,每个人的三科总成绩,新建一个cell,在里面写上:

data = df[['数学', '语文', '英语']]score = data.sum(1)score.name = '总成绩'pandas.concat([df, score], 1)

shift+回车,运行,你就会看到如下结果:

085ab30fa56ce00ba73dd9cb9fe60e4e.png

怎么样,是不是发现多出了一列总成绩?代码就是这么的简单,如果你想算三科成绩的平均值、最小值、最大值,你只需要做一点简单的修改:

# 计算平均成绩data = df[['数学', '语文', '英语']]score = data.mean(1)score.name = '三科平均成绩'pandas.concat([df, score], 1)

# 计算三科最高分data = df[['数学', '语文', '英语']]score = data.max(1)score.name = '三科最高分'pandas.concat([df, score], 1)

# 计算三科最低分data = df[['数学', '语文', '英语']]score = data.min(1)score.name = '三科最低分'pandas.concat([df, score], 1)

代码是很简单,那么接下来,让我来说明下,这些代码都是什么意思,分别起了什么作用,让你以后也能写出属于自己的代码~

让我们先把代码整合一下,变成下面的亚子:

import pandasdf = pandas.read_excel(r'D:\成绩.xlsx')data = df[['数学', '语文', '英语']]score = data.sum(1)score.name = '总成绩'pandas.concat([df, score], 1)

这就是6行代码,计算出三科成绩总和。

首先第一行:导入pandas,不用多解释了吧?

第二行,利用pandas中带的read_excel方法读取刚才生成的excel文件。

注意到,这里比起以前多了一个df = ,那么,这是什么意思呢?

简单来说,你可以把df想象成一个箱子,= 号的意义就是把pandas读取到的excel文件内容放到这个箱子里,之后你通过df这个箱子,对箱子里的内容进行操作。

所以第二行整体的意思就是:我们生成了一个叫df的箱子,然后,利用pandas里面的read_excel这个函数,读取到了刚才生成的excel表,然后,把这个excel表的内容存放到了df这个箱子里,以便于后续操作。

第三行,看起来很复杂,其实很简单,现在df里面已经装着excel了,而我们想要取到它里面某一列的数据该怎么办呢?很简单,你可以自己试试,运行一下:

# 这样就会获取到数学那一列,你可以改为语文,英语、甚至姓名、年龄df['数学']

那我想要取多列怎么办?

# 只需要把这一串['语文', '数学', '英语']替换给'数学'# 所以就变成了df[['数学', '语文', '英语']]

所以第三行就是,生成了一个叫data的箱子,把excel里面的语文、英语、数学三列提取出来,放到data这个箱子里。

第四行,现在data这个箱子里,已经只有三列了,那我们就可以放心大胆的计算这三列的总和,只需要data.sum(1),就能得出求和的结果。所以就是,把求和出来的结果,放到score这个箱子里。

第五行,就是给新计算出来的列取个名字,我写的是总成绩,你可以随便取,如果没有这一行代码,将来表格上就没有列名,很丑。

第六行,concat这个单词,是连接的意思,所以就是,把求和后的score这个表(列)连接到原来的表屁股后面。

a0d2533c7b74057c102af962adecb9c7.png

# 为了更好的说明,我决定举个栗子# 这样,就是把score 粘到df的屁股后面pandas.concat([df, score], 1)# 这样,就是把df粘到score的屁股后面# 你都可以在jupyter上随便操作看看pandas.concat([score, df], 1)

这些代码你都可以发挥你的想象,自己修改了看看,不用担心,电脑不会爆炸1806d85de6ef98533b6f0f65b0958098.png1806d85de6ef98533b6f0f65b0958098.png 也不会死机。

可以注意到,concat 和 sum 里面都一个数字1,那么它又是什么意思呢?

其实,它就是控制求和的方向,如果你填0,它就会从上往下求和,比如:

data.sum(0)

这一行代码,就会把所有人三科成绩的总和加起来,运行效果如下

3bcaeb4f169bee3dcea5f9a92f5f4343.png

至于,pandas.concat([score, df], 1) 这个函数中的1改成0会怎么样?你可以改了试试,以后会对它进行更深入的说明~

欢迎关注本公众号,学习更多有趣的python数据分析小知识!




推荐阅读
author-avatar
七彩咩_131
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有