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




Python 适合开发什么
Python语言可以用来作为过程语言,进行我们常见的应用程序开发,可以和VB等语言一样应用。Python语言可以用来作为面向对象语言,具有大部分面向对象语言的特征,常作为大型应用软件的原型开发,再用C++改写,有些直接用Python来开发。数据库 Python在数据库方面也很优秀,可以和多种数据库进行连接,进行数据处理...

Python其实很简单 第二十一章 DataFrame数据处理
将Excel中的的数据读入数据框架DataFrame后,可以非常方便的进行各种数据处理。 21.1 列间求和 求总分(总分=语文+数学+英语) 对于上一章所提到的学生成绩表,仅用一个语句即可完成总分计算,并填充。 df['总分']=df['语文']+df['数学']+df['英语'] 完整代码如下: from pandas import read_excel file='d:...

Python其实很简单 第十一章 正则表达式
>>> re.match('bPy[a-z]+','Python') # 表达式'bPy[a-z]+'不能匹配’Python’>>> re.match('bPy[a-z]+','Python') # 表达式'bPy[a-z]+'可以匹配’Python’在上述代码中,原本要用作匹配单词开始或结束的元字符’b’在表达式中字符串中会被视为转义一个字符‘b’,为了转义’b’...

python这么简单,只学这一个能有好的发展吗?
当然可以,Python是一门高级的编程语言,语法清晰、容易入门、简单易懂,对初学者友好。学习Python之后可以从事的岗位有很多,包含:人工智能、Web开发、游戏开发、数据分析、自动化运维、爬虫等领域。

数据分析师为什么要学python
当然,像Java等语言也可以实现爬虫功能,但Python实现起来是比较简单的。并且Java的学习成本太大, 而Python是十分简单的,下面我们就来看一看Python的数据分析功能。那么Python的使用范围是什么呢?其实python为使用者提供了一系列的数据分析包,经常用到的分析报包括Numpy以及pandas;此外还为使用者提供了一些...

python c 和java的区别有哪些
Python是一种脚本语言。它更适合用来做算法。Python简单易学,对于新手来讲是编程入门的好选择。Python其实也是基于C++创造的,它们的区别主要体现在,C++效率高,编程难;Python效率低,编程简单。比如同样的事情,Python程序员可以很快的写出代码,但机器运行却可能需要成倍于C++的时间;反之,C++程序员编程...

python适合女孩学吗?
首先,想要告诉大家的是女生也适合学习Python。Python开发是一种计算机开发工作,不涉及体力劳动,无论男女,为工作学习Python并无优劣之分。Python语言本身简单易学,语法结构也比较简单,有大量的第三方库可以使用,从而降低了Python的学习难度。即使是逻辑思维能力较差的人也可以学习Python开发,所以女生也适合...

Python和Java学哪个更好?
再来正视一下大家普遍对python的三个误区:误区一:python简单易学 “语法简单,易读易维护”这句对python优点的总结一点儿也没错,很多人就会认为python比其他语言都好学。其实仅仅是入门更快而已,实际应用过程中,没有人会觉得项目难点在用什么语言上,而是解决问题的思路上。误区二:python后来居上 实际...

为什么要学 Python???
1、市场需求量大,很多互联网相关企业都在利用Python来完成相关工作,Python的相关工作人员的薪资待遇也是非常可观的。2、简单易学,Python的语法非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读和理解。即使是编程初学者也能较为轻松地开始Python的学习旅程。3、应用领域广泛,在互联网大环境下...

Python其实简单易上手,这70个Python 实战项目
70个Python 项目列表:1、[Python图片转字符画)2、[200行 Python 代码实现 2048)3、[Python3 实现火车票查询工具]4、[高德 API+Python 解决租房问题]5、[Python3 色情图片识别]6、[Python 破解验证码]7、[Python 实现简单的 Web 服务器 8、[pygame 开发打飞机游戏]9、[Django 搭建简易博客]10、...

麻山区18529399094: 毫无基础的人如何入门 Python ?
常面感冒: 1. Python是一门非常适合入门的编程的语言,因为它是高度封装的,不需要对于底层特别了解,也能够很好学习使用,python语法非常简单,代码可读性高,对于零基础的人来说更容易接受和使用.2. Python对于代码的规范性要求非常严格,特...

麻山区18529399094: 怎么学习python语言 -
常面感冒: 其实学什么语言的方法都差不多.我觉得有两点最重要:基础和实践.你需要一本python基础教程,哪一本都行,只要你喜欢.初学者一定要通读,每一章都读.基本的语法、基本的概念一定要熟悉.可以同时开着电脑,照者书中的例题练习.书看完以后可以抽时间翻翻官方的类参考手册.不要死记,了解里面都提供了哪些功能即可.以后真用到了再来那里查.实践也很重要.不实践,会捡了芝麻丢了西瓜.觉得自己代码写不好,可以看看别人写的代码.挑选质量好、简单一点的.第三方库了解一些常用的.然后自己找个项目做,简单一点的.如果有机会参与公司的项目,最好积极参与,这是学习的好机会.

麻山区18529399094: 对于性格,行为的两种不同表现是什么原因,真能产生两种性格吗
常面感冒: 其实每个人都有2种想法和2种做法~或者有些人就会有千面~ 在不同的人面前~你就会做不同的事,会有著不同的想法 你其中的一面肯定是你给平常的人的感觉,和个性~ 另一面,肯定就是你心里面一直想成为,或者真实的你~ 有的时候你做件事...

麻山区18529399094: 如何才能知道自己的潜力有多大? -
常面感冒: 如何挖掘人的潜力,最大限度的发挥其积极性与主观能动性,这是每个管理者苦苦思索与追求的.在实行这一目标时,人们谈的最多的话题,就是激励手段.在实施激励的过程中,人们采取较为普遍的方式与手段是根据绩效,给员工以相应的奖...

麻山区18529399094: 为什么很多人都说python简单 -
常面感冒: 在学习python的时候,面对的不仅仅是python这门语言,还需要面临“编程”的一些普遍问题从零开始,不知道从何入手,找了本编程教材发现第二章开始就看不懂了 缺少计算机基础知识,被一些教程略过的“常识性”问题卡住 遇到问题不知道怎么寻找解决方案 看懂语法之后不知道拿来做什么,学完一阵子就又忘了 缺少数据结构、设计模式等编程基础知识,只能写出小的程序片段

麻山区18529399094: 自学python想知道哪些章节是重点用到的多 -
常面感冒: 第一个阶段 初级,掌握Python的语法和一些常用库的使用 这里首先推荐廖雪锋在网上的书籍,这是Python2.7版本的,这本书适合于重头开始一直读完,作为一个开发人员,除了基本的语法,这本书里面提到了一些其他的常用的库,看了廖老师...

麻山区18529399094: Python这门语言为什么适合初学者 -
常面感冒: 2017年编程语言排行榜已新鲜出炉,毫无疑问,JAVA、C以及C++语言名列前三,排名第四的当属当下最火爆的Python语言.Python的火爆源自于市场的需求和语言的本身特性,在国外市场Python很早就开始使用,并得到了广泛的应用,如我...

麻山区18529399094: 螺旋境界线装备关卡第21章打法分享
常面感冒: 螺旋境界线装备关卡第21章打法分享,螺旋境界线装备关卡21章怎么过?21章用什么阵容比较好?用什么卡牌比较好呢?相信还是有很多小伙伴不清楚的,下面跟着小编一起看看吧.螺旋境界线问:螺旋境界线装备关卡21关怎么过?答:小编推荐一下4种通关方式.一、1后排1奶2前排,前排趁没有麻痹的间隙丢技能.22章等级限制40级,也可以不用急.二、白星+微笑+米雪+斑鸠 过得 白星攻击1300+能过.三、可以三近战一奶,卡好时机,近战没有麻痹的时候在技能,把对方推出去,我打了二十多次,勉强过,看运气吧.四、斑鸠蜜雪微笑基佬法,过图的时候战斗力5500+,最后一秒涉险过关.

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网