导航:首页 > 编程语言 > python数据处理课题

python数据处理课题

发布时间:2025-02-17 17:03:29

⑴ 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(񟚓',na=False)]

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

21.5修改记录

1、整列替换

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

即如下语句:

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

2、个别修改

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

df.replace(ྟ',颼')

将指定列的值替,如将语文列和英语列的值‘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采集数据处理:利用Pandas进行组排序和筛选

概述网络爬虫技术在现代数据处理中的重要性,强调利用Python的Pandas库对采集到的数据进行高效处理和筛选。文章通过示例演示了如何在使用Pandas进行数据的组排序和筛选时,结合代理IP技术和多线程技术,以提高数据采集效率。重点介绍了数据采集和处理概述,以及实现多线程技术的步骤,最后通过代码示例全面展示实际应用过程。

在数据处理领域,网络爬虫技术日益显着,其自动收集大量数据的能力为数据分析提供了丰富的资源。Pandas库作为数据处理利器,提供了强大的数据结构和数据分析功能。文章旨在介绍如何通过Pandas对网络爬虫采集的数据进行细致处理,包括分组、排序和筛选等关键步骤。文章通过实例展示,结合代理IP服务和多线程技术,实现数据采集效率的提升。

细节部分,文章首先概述了网络爬虫的基本概念和数据处理流程,强调了Pandas在数据转换和操作中的作用。接着,文章深入探讨了代理IP技术在避免网站封锁、提高爬虫稳定性方面的重要性,通过亿牛云爬虫代理服务进行了实例演示。随后,文章介绍了多线程技术如何用于加速数据采集过程,利用Python的threading模块实现并发操作。

实现代码部分,文章提供了一个完整的Python示例,具体展示了如何将理论知识应用于实际数据处理场景。该代码示例整合了Pandas数据处理功能、代理IP技术以及多线程技术,旨在高效完成数据采集任务。文章最后总结了实现步骤,强调了通过结合Pandas、代理IP和多线程技术,能够显着提升数据采集效率和稳定性,为读者在数据处理领域提供了实用的参考。

通过本文示例,读者可以学习到如何有效利用Python的Pandas库、代理IP技术以及多线程技术,以实现数据采集的自动化和效率提升。文章鼓励读者在实际应用中尝试和探索,对任何反馈或建议都保持开放态度,以促进数据处理领域的持续发展。

阅读全文

与python数据处理课题相关的资料

热点内容
28运营源码 浏览:345
移动地图定位系统python 浏览:874
云南服务器机房有哪些云空间 浏览:923
日产金融解压车 浏览:830
编译的综合模型和分析模型 浏览:608
javasql分页 浏览:679
农场理财游戏源码 浏览:503
悦动开了空调但压缩机不工作 浏览:11
phptimestamp转换 浏览:694
是不是程序员只招本科生 浏览:638
有没有加密手机文件夹的软件 浏览:760
多个c语言编译 浏览:667
腰部压缩性骨折卧床不吃药能好吗 浏览:817
整体齿轮式压缩机 浏览:686
招程序员学徒是真是假 浏览:428
电影公司加密优盘 浏览:514
java发送邮件服务器 浏览:412
安卓手机选择什么样的基带好 浏览:855
区块链革命pdf 浏览:266
android视频监控播放 浏览:429