python 处理 dataframe的汇总

0 处理异常
https://blog.csdn.net/m0_60862600/article/details/124913418?spm=1001.2014.3001.5501

1 替换

示例
完整代码如下:

from pandas import read_excelfile='d:/student.xlsx' #见第18章表18-1df=read_excel(file,sheet_name=0,converters={'学号':str})df['总分']=df['语文']+df['数学']+df['英语']print(df.head()) #df.head()的作用是仅显示5行记录。

运行结果如下:

序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次0 1 070101 王博宇 NaN NaN 84 71 93 248 NaN1 2 070102 陈冠涛 NaN NaN 89 89 89 267 NaN2 3 070103 李文博 NaN NaN 89 72 76 237 NaN3 4 070204 姜海燕 NaN NaN 89 89 89 267 NaN4 5 070205 林若溪 NaN NaN 91 95 83 269 NaN

既可以将对满足条件的行和列的数据替换,也可以对整个集合的数据按照条件进行替换。

df['总分'].replace(310,'x',inplace=True)

将总分列的数值“310”替换为“x”。inplace=True表示改变原数据。

df.replace(76,0,inplace=True)

将整个DataFrame中的数值“76”替换为“0”。

df.replace([98,76,99],0,inplace=True)

将整个DataFrame中的数值“98,76,99”一次替换为“0”。

2 排序
既可以将某一列作为关键字段排序,也可以将几个列分别作为主、次关键字段进行排序。排序既可以按升序排序,也可以按降序排序。

函数sort_values()的语法格式如下:

df.sort_values(by=[“col1”,”col2”,......,”coln”],ascending=False)

其中,coln表示列名,也可以是列名的列表;ascending表示排序方式,值为True表示升序,可以省缺,值为False表示降序。

如:

df=df.sort_values(by=['总分'],ascending=False)

表示按照“总分”从高到低排序。

df=df.sort_values(by=['总分','语文'],ascending=False)

表示按照“总分”从高到低排序,若“总分”相同,再按照“语文”成绩从高到低排序。

字段截取
函数slice()可以从某列中截取字符串。格式如下:

slice(start,stop)

其中,start表示开始位置;stop表示结束位置

例:

df['年级']=df['学号'].str.slice(0,2)

通过此语句可以截取学号字段的第1、2个字符,并赋值给年级字段。

21.4 记录抽取

可以抽取满足条件的记录。

例:抽取总分>300的记录。

df[df.总分>300]

抽取总分在300到310之间(包括300和310)的记录。

df[df.总分.between(306,310)]

抽取学号中包含“0803”的记录。这样可以非常方便的抽取某个班的信息。

df[df.学号.str.contains('0803',na=False)]

此处的na=False,含义是如遇到NaN这样的数据,直接做不匹配处理。

21.5修改记录

1、整列替换

我们在前面已经给整列填充过数据,填充时原来的数据就被覆盖了。

即如下语句:

df['总分']=df['语文']+df['数学']+df['英语']

2、个别修改

如将值‘99’替换为值‘100’,可用如下语句:

df.replace('99','100')

将指定列的值替,如将语文列和英语列的值‘99’替换为值‘100’,可用如下语句:

df.replace({'语文':99,'英语':99},100)

可用如下程序去验证:

from pandas import read_excelfile='d:/student.xlsx'df=read_excel(file,sheet_name=0,converters={'学号':str})print(df[(df.语文==99) |(df.英语==99)])df=df.replace({'语文':99,'英语':99},100)print(df[(df.语文==99) |(df.英语==99)])

运行结果为:

序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次28 29 090802 丁能通 09 NaN 119 120 99 338 NaN29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN
Empty DataFrameColumns: [序号, 学号, 姓名, 年级, 班级, 语文, 数学, 英语, 总分, 名次]Index: []

可以看出,第一个print()语句输出的结果中满足条件“语文或英语为99分”的有两条记录,替换语句执行以后,df中再没有满足条件“语文或英语为99分”的记录了。

21.6记录合并

函数concat()的格式如下:

concat([dataFrame1,dataFrame2,......],ignore_index=True)

其中,dataFrame1等表示要合并的DataFrame数据集合;ignore_index=True表示合并之后的重新建立索引。其返回值也是DataFrame类型。

concat()函数和append()函数的功能非常相似。

例:

import pandas #导入pandas模块from pandas import read_excel #导入read_execelfile='d:/student.xlsx' #变量file表示文件路径,注意'/'的用法 数据见第18章表18-1df=read_excel(file,sheet_name=0,converters={'学号':str})# 将Excel文件导入到DataFrame变量中df=df[:5] #截取df的前5个记录print(df) #输出dfdf1=df[:3] #截取df的前3个记录存入df1中df2=df[3:5] #截取df的最后2个记录存入df2中df3=pandas.concat([df2,df1]) #将df2与df1合并存入df3中print(df3) #输出df3

运行结果如下:

序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN

由于合并时是将df1合并到df2中,可以看出,索引仍然保持原来的状态。

21.7统计次数

可以用如下方法统计出某个值在某行或者某个范围出现的次数。

from pandas import read_excelfile='d:/student.xlsx'df=read_excel(file,sheet_name=0,converters={'学号':str})df=df[:5]print(df)print(df['语文'].value_counts())

输出结果如下:

序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次

0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
89 384 191 1Name: 语文, dtype: int64

可以看出,通过value_counts()函数可以统计出列中各值出现的次数。

value_counts()函数的参数还有 :

ascending,当ascending=True时升序排列,当ascending=False时升序排列(此时该参数可省缺);

normalize,当normalize=True时,显示的不再是各值出现的次数,而是占比。

将上例中的语句print(df[‘语文’].value_counts())改为:

print(df['语文'].value_counts(ascending=True,normalize=True))

则输出结果变成了:

91 0.284 0.289 0.6Name: 语文, dtype: float64

21.8按值查找

print(df['语文'].isin([84,91]))

它的作用是查找‘语文’列中值和isin所指的列表中元素一致的记录,如果找到结果为True,否则为False。

输出结果:

0 True1 False2 False3 False4 TrueName: 语文, dtype: bool

21.9数据分区

根据某个分区标准,将数据按照所属区域进行划分,并用相应的标签表示,可以用cut()方法来实现。

语法格式如下:

cut(series, bins, right=True, labels=NULL)

其中:

series表示需要分组的数据;

bins表示分组的依据,是一个列表,其元素为划分分区的边界值,如[0,72,96,120],就是划分3个分区,即072、7296、96~120,默认的是“左包右不包”;

right表示分组时右边是否闭合;

labels表示分组的自定义标签,也可以不重新定义。

下面对上述学生成绩表中的语文成绩进行分组,并增加一个新的列“语文等级”。

import pandas as pdfrom pandas import read_excel #导入read_execelfile='d:/student.xlsx'df=read_excel(file,sheet_name=0,converters={'学号':str})df['年级']=df['学号'].str.slice(0,2)df['班级']=df['学号'].str.slice(0,4)df.总分=df.语文+df.数学+df.英语bins=[0,72,96,max(df.语文)+1] #lab=['不及格','及格','优秀']grade=pd.cut(df.语文,bins,right=False,labels=lab)df['语文等级']=gradeprint(df.head())print("语文成绩分等级统计结果:")print(df['语文等级'].value_counts())

运行结果如下:

序号 学号 姓名 年级 班级 语文 数学 英语 总分 语文等级0 1 070101 王博宇 07 0701 84 71 93 248 及格1 2 070102 陈冠涛 07 0701 89 89 89 267 及格2 3 070103 李文博 07 0701 89 72 76 237 及格3 4 070204 姜海燕 07 0702 89 89 89 267 及格4 5 070205 林若溪 07 0702 91 95 83 269 及格
语文成绩分等级统计结果:及格 17优秀 10不及格 4Name: 语文等级, dtype: int64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 696. 计数二进制子串

1. 题目 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。 重复出现的子串要计算它们出现的次数。 示例 1 : 输入: "00110011" 输出: 6 解释: 有6个子串具有相同数量…

论文浅尝 - ISWC2021 | 当知识图谱遇上零样本视觉问答

论文题目:Zero-shot Visual Question Answering using Knowledge Graph本文作者:陈卓(浙江大学)、陈矫彦(牛津大学)、耿玉霞(浙江大学)、Jeff Z. Pan(爱丁堡大学)、苑宗港(华为)、陈华钧(浙江大学)发表会议:ISWC 2021论文链接:htt…

Java 8系列之重新认识HashMap

HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别&…

利用Python进行数据分析+准备工作+缺失数据+数据转换+数据规整+数据聚合与分组运算

利用Python进行数据分析:准备工作 利用Python进行数据分析:缺失数据(基于DataFrame) 利用Python进行数据分析:数据转换(基于DataFrame) 利用Python进行数据分析:数据规整&#xf…

LeetCode 1042. 不邻接植花(图的数据结构)

1. 题目 有 N 个花园,按从 1 到 N 标记。在每个花园中,你打算种下四种花之一。 paths[i] [x, y] 描述了花园 x 到花园 y 的双向路径。 另外,没有花园有 3 条以上的路径可以进入或者离开。 你需要为每个花园选择一种花,使得通…

我用Transformer修复代码bug

源:机器之心本地化 Bug 并修复程序是软件开发过程中的重要任务。在本篇论文中,来自微软 CloudAI 部门的研究者介绍了 DeepDebug,一种使用大型预训练模型 transformer 进行自动 debug 的方法。首先,研究者基于 20 万个库中的函数训…

论文浅尝 | 一种基于递归超图的知识图谱问答方法

笔记整理 | 谭亦鸣,东南大学博士生来源:EACL’21链接:https://www.aclweb.org/anthology/2021.eacl-main.35.pdf概述与动机本文提出了一种基于递归超图的知识图谱问答方法RecHyperNet,作者认为人回答问题时倾向于在推理过程中递归…

模拟登录——添加cookies,使用postmanget请求网页数据

摘要: 在进行爬虫时,除了常见的不用登录就能爬取的网站,还有一类需要先登录的网站。比如豆瓣、知乎,以及上一篇文章中的桔子网。这一类网站又可以分为:只需输入帐号密码、除了帐号密码还需输入或点击验证码等类型。本文…

论文浅尝 | 神经网络是如何外推的:从前馈神经网络到图神经网络

笔记整理 | 王泽元,浙江大学在读硕士,研究方向为图神经网络,对比学习。什么是外推?指从已知数据的孤点集合中构建新的数据的方法。与插值(interpolation)类似,但其所得的结果意义更小&#xff0…

恕我直言,很多调参侠搞不清数据和模型谁更重要

作者:Dario Radecic,Medium 高质量技术博主编译:颂贤▲图源:[Brandon Lopez]一般的AI课程会介绍很多如何通过参数优化来提高机器学习模型准确性的方法,然而这些方法通常都存在一定的局限性。这是因为我们常常忽视了现代…

专访美团外卖曹振团:天下武功唯快不破

本文转自InfoQ中文网站,首发地址:http://www.infoq.com/cn/news/2016/06/Meituan-take-away 马云曾经说过:世界是懒人创造出来的。在“懒人”们的推动下,O2O的战火已经燃烧到了外卖行业。据报告,2015年外卖市场年交易额…

LeetCode 720. 词典中最长的单词(Trie树)

1. 题目 给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。 若无答案,则返回空字符串。 示例 1: 输入: …

postman调的通,python调用程序却要显示登录

postman调的通,python调用程序却要显示登录 1 解决方案: 添加verify False 2 手动在网页上复制粘贴token和auth相关验证在这里插入代码片 import requests url "" requests.packages.urllib3.disable_warnings()s requests.Session()s.tr…

论文浅尝 | 通过知识到文本的转换进行知识增强的常识问答

笔记整理:陈卓,浙江大学在读博士,主要研究方向为低资源学习和知识图谱论文链接:https://www.aaai.org/AAAI21Papers/AAAI-10252.BianN.pdf发表会议:AAAI 2021动机文章提出了对于未来CQA(Commonsense QA)问题的三个见解…

聊聊机器翻译界的“灌水与反灌水之战”!

文 | Willie_桶桶编 | 智商掉了一地针对机器翻译领域如何提高和判断实验可信度,这篇ACL2021的oustanding paper迈出了关键的一步!(来读!全文在末尾)作为不停读论文和调参炼丹的科研党,也许在我们的身边总会…

LeetCode 273. 整数转换英文表示

1. 题目 将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。 示例 1: 输入: 123 输出: "One Hundred Twenty Three"示例 2: 输入: 12345 输出: "Twelve Thousand Three Hundred Forty Five"示例 3: 输入: 1234567 输出: "One Mill…

数据标注平台doccano----简介、安装、使用、踩坑记录

1.doccano的安装与初始配置 1.1 doccano的用途 document classification 文本分类sequence labeling 序列标注,用于命名实体识别sequence to sequence seq2seq,用于翻译speech to text 语音转文本标注 命名实体标注 序列标注(如机器翻译&…

月圆花美 中秋快乐!

OpenKGOpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。点击阅读原文,进入 OpenKG 网站。

大众点评支付渠道网关系统的实践之路

业务的快速增长,要求系统在快速迭代的同时,保持很好的扩展性和可用性。其中,交易系统除了满足上述要求之外,还必须保持数据的强一致性。对系统开发人员而言,这既是机遇,也是挑战。本文主要梳理大众点评支付…

拍不完的脑袋:推荐系统打压保送重排策略

文 | 水哥源 | 知乎saying1.懂模型不只是要知道模型能干什么,更要知道它不能干什么2.在从业一段时间后应该有一次“转职”,如果你相信模型无所不能,你应该走科研路线;如果你对模型不是很放心,那你应该成为一名工程师3.…