版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第17章Python数据分析主讲夏敏捷计算机学院副教授PythonDataAnalysisLibrary(Pandas)PythonDataAnalysisLibrary(Pandas)是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas提供了一些标准的数据模型和大量能使我们快速便捷地处理数据的函数和方法,使Python成为大型数据集强大而高效的数据分析工具。本章就来学习Pandas操作方法。Pandas提供如下数据类型:(1)Series系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。
(2)DataFrame数据框(DataFrame)是二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。(3)Panel面板(Panel)是三维的数组,可以理解为DataFrame的容器。17.1PythonDataAnalysisLibrary(Pandas)2.使用Pandas首先需要安装,在命令行下使用pip3installpandas即可。Pandas约定俗成的导入方法如下:importpandasaspdfrompandasimportSeries,DataFrame如果能导入成功,说明安装成功。17.1PythonDataAnalysisLibrary
(Pandas)17.1.1Series系列1.创建Pandas系列Series就如同列表一样是一系列数据,每个数据对应一个索引值。可以看做一个定长的有序字典。s=Series(['中国','美国','日本']) #注意这里是默认索引0,1,2s=Series(['中国','美国','日本'],index=['a','b','c'])
#自定义索引s=Series(data=['中国','美国','日本'],index=['a','b','c'])Pandas系列可以使用以下构造函数创建:pandas.Series(data,index,dtype,copy)17.1.1Series系列2.访问Pandas系列(1)使用位置访问Pandas系列中数据s=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])print(s[0])#访问第一个元素1print(s[:3])#检索系列中的前三个元素1,2,3print(s[-3:])#检索系列中的最后三个元素3,4,5(2)使用索引访问Pandas系列中数据系列Series就像一个固定大小的字典,可以通过索引标签获取和设置值。s=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])print(s['b'])#结果是2print(s[['a','c','d']])#获取索引a,c,d对应值17.1.2DataFrame数据框(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。基本上可以把DataFrame看成是共享同一个index索引的Series的集合。构造函数创建pandas.DataFrame(data,index,columns,dtype,copy)17.1.2DataFrame1.从单个列表创建DataFrameimportpandasaspddata=[10,20,30,40,50]df=pd.DataFrame(data)print(df)2.从多维列表创建DataFrameimportpandasaspddata=[['Alex',10],['Bob',12],['Clarke',13]]df=pd.DataFrame(data,columns=['Name','Age'])print(df)17.1.2DataFrame(3)从键值为ndarrays/Lists的字典来创建importpandasaspddata={'Name':['Tom','Jack','Steve','Ricky'],'Age':[28,34,29,42]}df=pd.DataFrame(data)print(df)(4)从系列Series的字典来创建importpandasaspdd={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df)DataFrame的基本功能DataFrame的基本功能>>>importpandasaspd>>>df=pd.read_csv("marks2.csv")#marks2.csv是成绩信息>>>
df.T#DataFrame的转置。实现行和列将交换DataFrame的基本功能head()和tail()要查看DataFrame对象的部分数据,可使用head()和tail()方法。head()返回前n行(默认数量为5)。tail()返回最后n行(默认数量为5)。但可以传递自定义的行数。DataFrame的行列操作(1)选择列通过列名从数据框(DataFrame)中选择一列importpandasaspdd={'one':pd.Series([11,12,13],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df['one'])#选择'one'列DataFrame的行列操作(2)添加列importpandasaspdd={'one':pd.Series([11,12,13],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print("AddinganewcolumnbypassingasSeries:")df['three']=pd.Series([10,20,30],index=['a','b','c'])print("AddinganewcolumnusingtheexistingcolumnsinDataFrame:")df['four']=df['one']+df['three']DataFrame的行列操作(3)删除列importpandasaspdd={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d']),'three':pd.Series([10,20,30],index=['a','b','c'])}df=pd.DataFrame(d)#使用DEL删除功能deldf['one']#删除one列#使用POP删除功能df.pop('two')#删除two列print(df)DataFrame的行列操作(4)行选择,添加和删除可以通过将行标签传递给loc()函数来选择行。importpandasaspdd={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}df=pd.DataFrame(d)print(df.loc['b'])也可以通过将行号传递给iloc()函数来选择行。print(df.iloc[2])#注意行号是零开始,所以实际是第3行也可以进行行切片,使用:运算符选择多行。print(df[2:4])#选择第3行到第4行DataFrame的行列操作(5)添加行#使用append()函数将新行添加到DataFrame中。
importpandasaspd
df=pd.DataFrame([[1,2],[3,4]],columns=['a','b'])
df2=pd.DataFrame([[5,6],[7,8]],columns=['a','b'])
df=df.append(df2)
print(df)DataFrame的行列操作(6)删除行使用索引标签从DataFrame中删除或删除行。如果标签重复,则会删除多行。importpandasaspddf=pd.DataFrame([[1,2],[3,4]],columns=['a','b'])df2=pd.DataFrame([[5,6],[7,8]],columns=['a','b'])df=df.append(df2)print(df)print('Droprowswithlabel0')df=df.drop(0)print(df)17.2Pandas统计功能DataFrame有很多函数用来计算描述性统计信息和其他相关操作。1.描述性统计描述性统计又叫统计分析,一般统计某个变量的平均值、标准偏差、最小值、最大值、以及1/4中位数,1/2中位数,3/4中位数。表17-4列出Pandas中主要的描述性统计信息的函数。17.2Pandas统计功能2.汇总DataFrame列数据describe()函数是用来计算有关DataFrame列的统计信息的摘要。包括数量count,平均值mean,标准偏差std,最小值min,最大值max,以及1/4中位数,1/2中位数,3/4中位数。17.2.2分组统计Pandas有多种方式来分组(GroupBy),如:obj.groupby(‘key’)obj.groupby([‘key1’,’key2’])obj.groupby(key,axis=1)例如:importpandasaspddf=pd.DataFrame([[199901,'张海','男',100,100,25,72],[199902,'赵大强','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建军','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'])grouped=df.groupby('sex')#按性别分组print(grouped.get_group('男'))17.3Pandas合并/连接和排序Pandas具有功能全面的高性能内存中连接操作,与SQL关系数据库非常相似。Pandas提供了一个merge()函数,实现DataFrame对象之间所有标准数据库连接操作。merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True)合并/连接importpandasaspd
left=pd.DataFrame({
'id':[1,2,3,4,5],
'Name':['Alex','Amy','Allen','Alice','Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right=pd.DataFrame(
{'id':[1,2,3,4,5],
'Name':['Billy','Brian','Bran','Bryce','Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
#'id'列用作键合并两个数据框。
print("'id'列用作键合并两个数据框")
rs=pd.merge(left,right,on='id')
print(rs)
合并/连接rs=pd.merge(left,right,on='subject_id',how='left')print(rs)
合并/连接rs=pd.merge(left,right,on='subject_id',how=‘inner')print(rs)
rs=pd.merge(left,right,on='subject_id',how='outer')print(rs)17.3.2排序和排名根据条件对Series对象或DataFrame对象的值排序(sorting)和排名(ranking)是Pandas一种重要的内置运算。Series对象或DataFrame对象可以使用sort_index()/sort_values()函数进行排序,使用rank()函数进行排名。Series的排序Series的sort_index()排序函数,对Series的索引进行排序,默认是升序importpandasaspds=pd.Series([10,20,33],index=["a","c","b"])#定义一个Seriesprint(s.sort_index())#对Series的索引进行排序,默认是升序print(s.sort_index(ascending=False))#ascending=False是降序排序对Series不仅可以按索引(标签)进行排序,还可以使用sort_values()函数按值排序。print(s.sort_values(ascending=False))#ascending=False是降序排序DataFrame的排序DataFrame的sort_index()排序函数使用sort_index()方法,可以对DataFrame进行排序。默认情况下,按照升序对行索引(标签)进行排序。importpandasaspddf=pd.DataFrame([[199901,'张海','男',100,100,25,72],[199902,'赵大强','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建军','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'],
index=[1,4,6,2])如果希望按某列的值排序,例如'english'的成绩排序可使用by参数。sorted_df=df.sort_index(by='english')#按列的值排序(不提倡)sorted_df2=df.sort_values(by='english')#按列的值排序print(sorted_df2)排名(ranking)rank(method="average",ascending=True)method参数值first按值在原始数据中的出现顺序分配排名,还有min使用整个分组的最小排名,max是用整个分组的最大排名,average使用平均排名,也是默认的排名方式。还可以设置ascending参数,设置降序还是升序排序。importpandasaspds=pd.Series([1,3,2,1,6],index=["a","c","d","b","e"])print(s.rank())#默认是根据值的大小进行平均排名print(s.rank(method="first"))17.4Pandas筛选和过滤功能Pandas的逻辑筛选功能比较简单,直接在方括号里输入逻辑运算符即可。假设数据框如下:importpandasaspddf=pd.DataFrame([[199901,'张海','男',100,100,95,72],[199902,'赵大强','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建军','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'],index=[1,4,6,2])df1=df[(df.math>80)&(df.english>90)]loc可以使用逻辑运算符设置具体的筛选条件。df2=df.loc[df['math']>80]#表示选取math列大于80的行print(df2)按筛选条件进行汇总很多时候我们还需要对筛选后的结果进行汇总,例如求和,计数,或计算均值等等。也就是Excel中常用的sumifs和countifs函数。importpandasaspddf=pd.DataFrame([[199901,'张海','男',100,100,95,72],[199902,'赵大强','男',95,54,44,88],[199903,'李梅','女',54,76,13,91],[199904,'吉建军','男',89,78,26,100]],columns=['xuehao','name','sex','physics','python','math','english'],index=[1,4,6,2])df1=df[(df.english>80)]print(df1['english'].count())print(df1['english'].mean())#计算>80的英语平均分按筛选条件进行汇总importpandasaspd
df=pd.DataFrame([[199901,'张海','男',100,100,95,72],
[199902,'赵大强','男',95,54,44,88],
[199903,'李梅','女',54,76,13,91],
[199904,'吉建军','男',89,78,26,100]],
columns=['xuehao','name','sex','physics','python','math','english'],
index=[1,4,6,2])
s2=df.loc[df['math']<80].math.sum()#表示选取math列小于80的行求math总和
print(s2)
s2=df.loc[df['math']<80].math.mean()#表示选取math列小于80的行求math平均分
print(s2)过滤过滤根据定义的条件过滤数据,并返回满足条件的数据集。filter()函数用于过滤数据。filter()函数格式如下:Series.filter(items=None,like=None,regex=None,axis=None)DataFrame.filter(items=None,like=None,regex=None,axis=None)例如:df1=df.filter(items=['sex','math','english'])#筛选需要的列print(df1)也可以使用regex正则表达式参数。例如获取列名h结尾的数据。df2=df.filter(regex='h$',axis=1)like参数意味“包含”。例如获取行索引包含2的数据。df3=df.filter(like='2',axis=0)17.5Pandas数据导入导出1.导入CSV文件importpandasaspddf=pd.read_csv("marks.csv")还有另外一种方法:df=pd.read_table("marks.csv",sep=",")17.5.2读取其它格式数据1.导入Excel文件pd.read_excel(filename)从Excel文件导入数据。例如:xls=pd.read_excel("marks.xlsx")sheet1=xls.parse("Sheet1")sheet1就是一个DataFrame对象。17.5.2读取其它格式数据2.导入JSON格式文件Pandas提供的read_json()函数,可以用来创建Series或者pandasDataFrame数据结构。(1)利用JSON字符串imp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省泰安市岱岳区2025-2026学年二年级上学期语文学情自测(文字版含答案)
- 2026年烟草统计核算专员烟草公司招聘考试笔试试题(含答案)
- 2026年烟草工会综合管理干事烟草公司招聘考试笔试试题(含答案)
- 2026 年妇科恶性肿瘤术后并发症护理个案分享
- 2026年秋季开学第一课:强国复兴有我
- 雨季房屋滴水权责划分与解决措施范本
- 应收账款债权转移协议书范本
- 2026年烟花爆竹储存考试题库(附答案)
- 2026新版手术室护理实践指南试题(附答案)
- 《医疗器械监督管理条例》培训试题及答案解析
- 乐平市市属国资控股集团有限公司面向社会公开招聘人员【15人】笔试历年常考点试题专练附带答案详解
- 医疗器械质量意识培训资料
- 氩弧焊焊接管理制度规范
- 会展策划书案例
- 实验室EHS安全培训内容课件
- 2025ACP临床指南:门诊预防发作性偏头痛的药物治疗解读课件
- 2025年“机器人+人工智能”工业应用研究报告
- 四川省绵阳市东辰学校2025-2026学年高一上学期第一次月考数学试题(含解析)
- 2025内蒙古巴彦淖尔市磴口县第三批社区工作者招聘60人笔试考试备考试题及答案解析
- 灭菌锅安全操作培训课件
- 非煤矿山机电安全培训
评论
0/150
提交评论