范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python其实很简单第二十一章DataFrame数据处理

  将Excel中的的数据读入数据框架DataFrame后,可以非常方便的进行各种数据处理。
  21.1 列间求和
  求总分(总分=语文+数学+英语)
  对于上一章所提到的学生成绩表,仅用一个语句即可完成总分计算,并填充。
  df["总分"]=df["语文"]+df["数学"]+df["英语"]
  完整代码如下:
  from pandas import read_excel
  file="d:/student.xlsx" #见第18章表18-1
  df=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 NaN
  1 2 070102 陈冠涛 NaN NaN 89 89 89 267 NaN
  2 3 070103 李文博 NaN NaN 89 72 76 237 NaN
  3 4 070204 姜海燕 NaN NaN 89 89 89 267 NaN
  4 5 070205 林若溪 NaN NaN 91 95 83 269 NaN
  21.2替换
  既可以将对满足条件的行和列的数据替换,也可以对整个集合的数据按照条件进行替换。
  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"。
  21.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)
  表示按照"总分"从高到低排序,若"总分"相同,再按照"语文"成绩从高到低排序。
  21.3 字段截取
  函数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_excel
  file="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 NaN
  29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN
  Empty DataFrame
  Columns: [序号, 学号, 姓名, 年级, 班级, 语文, 数学, 英语, 总分, 名次]
  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_execel
  file="d:/student.xlsx" #变量file表示文件路径,注意"/"的用法 数据见第18章表18-1
  df=read_excel(file,sheet_name=0,converters={"学号":str})
  # 将Excel文件导入到DataFrame变量中
  df=df[:5] #截取df的前5个记录
  print(df) #输出df
  df1=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 NaN
  1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN
  2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
  3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
  4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
  序号 学号 姓名 年级 班级 语文 数学 英语 总分 名次
  3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
  4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
  0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
  1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN
  2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
  由于合并时是将df1合并到df2中,可以看出,索引仍然保持原来的状态。
  21.7统计次数
  可以用如下方法统计出某个值在某行或者某个范围出现的次数。
  from pandas import read_excel
  file="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 NaN
  1 2 070102 陈冠涛 NaN NaN 89 89 89 NaN NaN
  2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
  3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
  4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
  89 3
  84 1
  91 1
  Name: 语文, 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.2
  84 0.2
  89 0.6
  Name: 语文, dtype: float64
  21.8按值查找
  print(df["语文"].isin([84,91]))
  它的作用是查找‘语文’列中值和isin所指的列表中元素一致的记录,如果找到结果为True,否则为False。
  输出结果:
  0 True
  1 False
  2 False
  3 False
  4 True
  Name: 语文, dtype: bool
  21.9数据分区
  根据某个分区标准,将数据按照所属区域进行划分,并用相应的标签表示,可以用cut()方法来实现。
  语法格式如下:
  cut(series, bins, right=True, labels=NULL)
  其中:
  series表示需要分组的数据;
  bins表示分组的依据,是一个列表,其元素为划分分区的边界值,如[0,72,96,120],就是划分3个分区,即0~72、72~96、96~120,默认的是"左包右不包";
  right表示分组时右边是否闭合;
  labels表示分组的自定义标签,也可以不重新定义。
  下面对上述学生成绩表中的语文成绩进行分组,并增加一个新的列"语文等级"。
  import pandas as pd
  from pandas import read_excel #导入read_execel
  file="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["语文等级"]=grade
  print(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
  不及格 4
  Name: 语文等级, dtype: int64

美国辣酱巨头潜伏我国30年,年营收达357亿,是老干妈的六倍据资料显示,我国的辣椒产业总体呈现逐年增长。去年辣椒的种植面积达到81。4万公顷,实现同比增长1。9。由辣椒加工生产出的辣椒酱已经备受当下众多偏爱辛辣口味消费者的喜爱。也许有人对辛由华为之殇,观美国的科技布局华为作为国内的高科技企业在中国科技圈也有着举足轻重的地位,此次制裁无疑是中美科技博弈的缩影,是老美对中国科技化崛起设置的障碍,但是也让我们国内有了更加清醒认知,我们的科技实力差距还Sophi。io荣获INMA全球媒体奖两个奖项GlobeandMail(环球邮报)人工智能驱动的优化和预测平台Sophi。io被授予国际新闻媒体协会(InternationalNewsMediaAssociation,INMA必知必会如何理解GNU?必知必会系列分享一些基础但有用的知识,有些知识虽然不能马上马上运用起来,但也是有必要了解了解。这是必知必会系列第一篇GNU。本文的一部分内容之前也有在大杂烩分享过,也一并集合到这,如何在windows下使用开源库?一前言大家好,我是ZhengN。最近工作中需要把项目嵌入式Linux平台代码移到Windows上做仿真模拟,需要解决三个问题搭建工程。动态库替换为Windows的。替换掉一些平台相盘点徕卡各相机最新固件版本为确保您的相机持续发挥更出色的性能,徕卡相机定期提供固件更新。今天我们将为大家盘点一下徕卡各机型相机最新固件版本。如需最新固件安装包以及安装教程的朋友可在文章下方留言徕卡S3固件版工具虚拟串口软件的使用分享在编写串口上位机时,需要进行调试。一种方式是与下位机进行通信进行测试另一种方式是借助虚拟串口软件来进行测试。虚拟串口软件使用演示虚拟串口软件是一种模拟物理串行接口的软件,它完全复制哈苏XCD45P镜头百闻,不如一用许兴华哈苏X1DII50CXCD45P哈苏在今年年初发布的XCD445P镜头是目前哈苏X1D系统中体积最小价格最低的镜头。视角比标准略宽,等效全幅镜头大约36mm人文焦距,光学性能玩转镜头轻巧全能M28mm228mm是新的35mm?这里面也有一定的道理,现在大多数智能手机相机都包含28mm等效焦距。因为28mm是一个非常自然的视角,其宽度足以捕捉整个场景,但又不会太宽以至于边缘看起来被玩转镜头不只是广角这么简单M24mm1。4天诺影像您身边的专业摄影顾问徕卡SummiluxM24mmf1。4ASPH。镜头拥有非凡的高性能,超乎寻常的速度出色的影像表现和超广角技术的融合以及紧凑的尺寸,深受摄影师的喜爱。2如何评价哈苏XCD45P镜头?一月份,哈苏发布全新XCD445P镜头,小巧轻便的它受到了广大摄影创作者的喜爱。这位XCD镜头新成员,给哈苏X系统带了哪些新体验?当它投入创作,又给摄影师们带来怎样的全新感受?一起
升级win11后卡顿不流畅?做好这6个设置,让你的系统速度飞起来我是隔壁家老王,一个爱分享知识的创作者,愿意每天为你分享科技干货知识。可能很多小伙伴都已经用上最新的windows11系统了。那你是不是还不太习惯这个仿苹果的新系统呢?如果你秉持默为什么现在300m的宽带和以前的20m感觉速度差不多?为什么300兆的宽带感觉和以前20兆的速度差不多?这个主要的原因可能是你上网的设备和接入网络的设备都是百兆的原因。或者是你的无线接入信号影响。对于网速的体验,没有一个标准的参考说法嘲笑苹果三星快充速度慢,充电速度越快越好吗?行内人给出答案现在国产手机的充电速度是越来越快了,甚至是否支持快充已成为手机的重要宣传参数,从最开始的10W20W45W65W甚至有的厂商现在使用120W的快充,快充的名字也在变化,从闪充超级快Win11降低PC速度高达50微软只是把描述改了一下微软承认Windows11会降低PC的速度,而且在极端情况下可以降低45,这让用户非常不满。微软官方表示会在近期修复这一问题。让人没想到的是,微软已经悄悄推送了新的更新,也确实解决自然发布2022年值得关注的七大科学事件科技日报记者刘霞尽管今年新冠疫情仍然肆虐,给人类带来不少悲剧和灾难,但每朵乌云都镶有金边!新冠疫苗成为抗击疫情的有力武器迄今最强大超导量子计算机上新。。科学家们的聪明才智给予人类很你会在意折叠屏手机折痕吗,小米三星华为和OPPO,谁更优秀?近期,OPPO发布了一款折叠屏手机OPPOFindN,引发网友热议。华为即将发布新机,参考曝出的真机图片,不难看出,这也是一款折叠屏手机。市面上在售的折叠屏机型很多,并不稀奇,华为永久中立国对外宣布,宁愿亏损276亿,也要绕开华为自建5G作为永久中立国的瑞典,在最近的民意调查中,瑞典国内超过80的人,拒绝使用华为的5G设备来建设当地的网络。而瑞典方面也是绝定,即便是亏损276亿,接下来也要绕开华为,自己展开5G建设华为无法被自由出货后,联发科发展强劲,外媒高通终于慌了为了遏制华为的发展,美方不仅不允许台积电继续为华为代工芯片,并且禁止第三方向华为出售芯片,这等于将华为的后路全部堵死,华为也至此陷入了芯片紧缺的危机之中。华为无法被自由出货无疑给国好饭不怕晚!再等等,华为Mate50Pro在路上临近尾声,智能手机市场也开始慢慢地恢复平静。回顾这一年竞争要比以往激烈不少,高端市场一年两更已成为家常便饭,而中低端市场也有不少猛将入局。但唯一遗憾的是,华为顶级旗舰Mate50系捅破内幕!挺高通拒华为的联想,终于登顶头条联想曾经作为国货之光,其美誉响彻世界,可自从柳传志提出股改之后,作为其主要股东的中科院逐渐被冷落,最终联想还通过未知手段拿掉了中科院所有股权,至此以后,倪南光院士与联想彻底断绝关系华为P60Pro渲染图搭载麒麟芯片强势回归,依然是iPhone强劲敌手手机厂商之间的竞争是越来越激烈,最主要的变化是各大手机厂商在手机外观上的设计更加白热化。其中作为代表的机型应当是华为手机,因为华为手机在外观上的设计非常出众,尤其是相机镜头外观先后