2023Python大数据分析工具Pandas用法05_第1页
2023Python大数据分析工具Pandas用法05_第2页
2023Python大数据分析工具Pandas用法05_第3页
2023Python大数据分析工具Pandas用法05_第4页
2023Python大数据分析工具Pandas用法05_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据分析工具Pandas用法目录TOC\o"1-2"\h\u12478一、Pandas系列 3293121.从List创建Series 4151022.在Series中添加相应的索引 571413.创建一个基本系列,是一个空系列 5243184.从ndarray创建一个系列 5259755.从字典创建一个系列 679826.从标量创建一个系列 654567.从具有位置的系列中访问数据 7268868.使用标签检索数据(索引) 711204二、Pandas数据帧 7187759.创建一个空的数据帧 8842410.从列表创建数据帧 8928811.从ndarrays/Lists的字典创建数据帧 92742412.从字典列表创建数据帧 9566013.从系列的字典创建数据帧 103259114.列选择 10286015.行选择 1116228三、Pandas面板 112067416.pandas.Panel() 111169817.从3Dndarray创建面板 123087818.从数据帧对象的dict创建面板 121867019.创建一个空面板 131932120.从面板中选择数据 135465四、Pandas快速入门 15326121对象创建 15301272查看数据 1749233选择区块 208255五、总结 29Pandas是Python的一个数据分析包,最初由AQRCapitalManagement于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发团队继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此Pandas为时间序列分析提供了很好的支持。Pandas的名称来自于面板数据(PanelData)和Python数据分析(Data Analysis)。面板数据是经济学中关于多维数据集的一个术语,在Pandas中提供了Panel的数据类型。标准的Python发行版并没有将Pandas模块捆绑在一起发布。安装Pandas模块的一个轻量级的替代方法是使用流行的Python包安装程序用pip来安装Pandas。Pandas在Python上的安装同样使用pip进行:pipinstallpandas。Pandas处理以下3种数据结构:系列(Series)。数据帧(DataFrame)。面板(Panel)。Pandas系列是具有均匀数据的一维数组结构。Series像Python中的数据类型List一样,每个数据都有自己的索引。系列可以使用以下构造函数创建:pandas.Series(data,index,dtype,copy)data:数据采取各种形式,如ndarray、list、constants。index:索引值必须是唯一的和散列的,与数据的长度相同。默认为np.arange(n),如果没有索引被传递。dtype:用于数据类型。如果没有,那么将推断数据类型。copy,复制数据,默认为false。从List创建Series【例6.1】在Series中添加相应的索引【例6.2】>>>importnumpyasnp>>>importnumpyasnp>>>ts=pd.Series(np.random.randn(365),index=np.arange(1,366))>>>ts在index中设置索引值,是一个从1到366的值。创建一个基本系列,是一个空系列【例6.3】#importthepandaslibraryandaliasingaspdimportpandasaspd#importthepandaslibraryandaliasingaspdimportpandasaspds=pd.Series()prints输出结果如下: Series([],dtype:float64) 从ndarray创建一个系列【例6.4】如果数据是ndarray,传递的索引就必须具有相同的长度。如果没有传递索引值,那么默认的索引将是范围(n),其中n是数组长度,即[0,1,2,3….range(len(array))-1]-1]。#importthepandaslibraryandaliasingaspdimportpandasaspd#importthepandaslibraryandaliasingaspdimportpandasaspdimportnumpyasnpdata=np.array(['a','b','c','d'])s=pd.Series(data)prints输出结果如下:aabcddtype:object这里没有传递任何索引,因此它分配了从0到len(data)-1的索引,即0到3。从字典创建一个系列【例6.5】字典(Dict)可以作为输入传递,如果没有指定索引,就按排序顺序取得字典键以构造索引。如果传递了索引,索引中与标签对应的数据中的值就会被拉出。#importthepandaslibraryandaliasingaspdimportpandasaspd#importthepandaslibraryandaliasingaspdimportpandasaspdimportnumpyasnpdata={'a':0.,'b':1.,'c':2.}s=pd.Series(data)prints输出结果如下:aa0.0b1.0c2.0dtype:float64注意:字典键用于构建索引。从标量创建一个系列【例6.6】如果数据是标量值,就必须提供索引。将重复该值以匹配索引的长度。#importthepandaslibraryandaliasingaspdimportpandasaspd#importthepandaslibraryandaliasingaspdimportpandasaspdimportnumpyasnps=pd.Series(5,index=[0,1,2,3])prints输出结果如下:005152535dtype:int64从具有位置的系列中访问数据【例6.7】系列中的数据可以类似于访问ndarray中的数据来访问。检索第一个元素。比如已经知道数组从0开始计数,第一个元素存储在0位置等。importpandasaspdimportpandasaspds=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])#retrievethefirstelementprints[0]得到以下结果: 1 使用标签检索数据(索引)【例6.8】一个系列就像一个固定大小的字典,可以通过索引标签获取和设置值。使用索引标签值检索单个元素。importpandasaspdimportpandasaspds=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])#retrieveasingleelementprints['a']得到以下结果: 1 Pandas数据帧数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。数据帧的功能特点如下:潜在的列是不同的类型。大小可变。标记轴(行和列)。可以对行和列执行算术运算。Pandas中的DataFrame可以使用以下构造函数创建: pandas.DataFrame(data,index,columns,dtype,copy) data:数据采取各种形式,如ndarray、series、map、lists、dict、constant和另一个DataFrame。index:对于行标签,要用于结果帧的索引是可选默认值np.arrange(n),如果没有传递索引值。columns:对于列标签,可选的默认语法是-np.arange(n)。只有在没有索引传递的情况下才是这样。dtype:每列的数据类型。copy:如果默认值为False,此命令就用于复制数据。Pandas数据帧可以使用各种输入创建:列表。字典。系列。NumPyndarrays。另一个数据帧。创建一个空的数据帧创建基本数据帧,是空数据帧。【例6.9】#importthepandaslibraryandaliasingaspdimportpandasaspd#importthepandaslibraryandaliasingaspdimportpandasaspddf=pd.DataFrame()printdf得到以下结果:EmptyDataFrameColumns:[]Index:[]EmptyDataFrameColumns:[]Index:[]从列表创建数据帧可以使用单个列表或嵌套多个创建数据帧。【例6.10】importpandasaspddata=[1,2,3,4,5]importpandasaspddata=[1,2,3,4,5]df=pd.DataFrame(data)printdf得到以下结果:000112233445从ndarrays/Lists的字典创建数据帧所有的ndarrays必须具有相同的长度。如果传递了索引(Index),索引的长度就应等于数组的长度。如果没有传递索引,那么默认情况下,索引将为range(n),其中n为数组长度。【例6.11】importpandasaspdimportpandasaspddata={'Name':['Tom','Jack','Steve','Ricky'],'Age':[28,34,29,42]}df=pd.DataFrame(data)printdf得到以下结果:注意:观察值0、1、2、3,它们是分配给每个使用函数range(n)的默认索引。从字典列表创建数据帧字典列表可作为输入数据传递以用来创建数据帧,字典键默认为列名。【例6.12】以下代码显示如何通过传递字典列表来创建数据帧。importpandasaspdimportpandasaspddata=[{'a':1,'b':2},{'a':5,'b':10,'c':20}]df=pd.DataFrame(data)printdf得到以下结果:注意:观察到NaN(不是数字)被附加在缺失的区域。从系列的字典创建数据帧字典的系列可以传递以形成一个数据帧。所得到的索引是通过索引的所有系列的并集。【例6.13】得到以下结果:注意:对于第一个系列,观察到没有传递标签'd',但在结果中,对于d标签附加了NaN。列选择下面将从数据帧中选择一列。【例6.14】得到以下结果:行选择可以通过将行标签传递给loc()函数来选择行。【例6.15】得到以下结果:oneone2.0two2.0Name:b,dtype:float64结果是一系列标签作为数据帧的列名称。而且,系列的名称是检索的标签。Pandas面板面板(Panel)是3D容器的数据。面板数据一词来源于计量经济学,部分源于名称:Pandas-pan(el)-da(ta)-s。3个轴(Axis)这个名称旨在给出描述涉及面板数据的操作的一些语义。它们是:items-axis0:每个项目对应于内部包含的数据帧。major_axis-axis1:每个数据帧的索引(行)。minor_axis-axis2:每个数据帧的列。pandas.Panel()使用以下构造函数创建面板:pandas.Panel(data,items,major_axis,minor_axis,dtype,copy)构造函数的参数说明如下。data:数据采取各种形式,如ndarray、series、map、lists、dict、constant和另一个数据帧。items:axis=0。major_axis:axis=1。minor_axis:axis=2。dtype:每列的数据类型。copy:复制数据,默认为false。从3Dndarray创建面板【例6.16】#creatinganemptypanelimportpandasaspdimportnumpyas#creatinganemptypanelimportpandasaspdimportnumpyasnpdata=np.random.rand(2,4,5)p=pd.Panel(data)printp得到以下结果:<class'pandas.core.panel.Panel'><class'pandas.core.panel.Panel'>Dimensions:2(items)x4(major_axis)x5(minor_axis)Itemsaxis:0to1Major_axisaxis:0to3Minor_axisaxis:0to4注意:观察空面板和上面板的尺寸大小,所有对象都不同。从数据帧对象的dict创建面板【例6.17】#creatinganemptypanelimportpandasaspdimportnumpyasnp#creatinganemptypanelimportpandasaspdimportnumpyasnpdata={'Item1':pd.DataFrame(np.random.randn(4,3)),'Item2':pd.DataFrame(np.random.randn(4,2))}p=pd.Panel(data)printp得到以下结果:<class'pandas.core.panel.Panel'><class'pandas.core.panel.Panel'>Dimensions:2(items)x4(major_axis)x5(minor_axis)Itemsaxis:0to1Major_axisaxis:0to3Minor_axisaxis:0to4创建一个空面板可以使用Panel的构造函数创建一个空面板:【例6.18】#creatinganemptypanelimportpandasaspd#creatinganemptypanelimportpandasaspdp=pd.Panel()printp得到以下结果:<class'pandas.core.panel.Panel'><class'pandas.core.panel.Panel'>Dimensions:0(items)x0(major_axis)x0(minor_axis)Itemsaxis:NoneMajor_axisaxis:NoneMinor_axisaxis:None从面板中选择数据要从面板中选择数据,可以使用以下方式:Items。Major_axis。Minor_axis。使用Items【例6.19】#creatinganemptypanelimportpandasaspdimportnumpyas#creatinganemptypanelimportpandasaspdimportnumpyasnpdata={'Item1':pd.DataFrame(np.random.randn(4,3)),'Item2':pd.DataFrame(np.random.randn(4,2))}p=pd.Panel(data)printp['Item1']得到以下结果:上面的示例有两个数据项,这里只检索item1。结果是具有4行和3列的数据帧,它们是Major_axis和Minor_axis维。使用major_axis可以使用panel.major_axis(index)方法访问数据。【例6.20】#creatinganemptypanelimportpandasaspdimportnumpyas#creatinganemptypanelimportpandasaspdimportnumpyasnpdata={'Item1':pd.DataFrame(np.random.randn(4,3)),'Item2':pd.DataFrame(np.random.randn(4,2))}p=pd.Panel(data)printp.major_xs(1)得到以下结果:使用minor_axis使用panel.minor_axis(index)方法访问数据。【例6.21】#creatinganemptypanelimportpandasaspdimportnumpyas#creatinganemptypanelimportpandasaspdimportnumpyasnpdata={'Item1':pd.DataFrame(np.random.randn(4,3)),'Item2':pd.DataFrame(np.random.randn(4,2))}p=pd.Panel(data)printp.minor_xs(1)得到以下结果:注意:观察尺寸大小的变化。Pandas快速入门假设用户已安装Anaconda,现在启动Anaconda开始示例。测试工作环境是否已安装Pandas,导入相关包如下:【例6.22】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltprint("Hello,Pandas")对象创建通过传递值列表来创建一个系列,让Pandas创建一个默认的整数索引。【例6.23】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnps=pd.Series([1,3,5,np.nan,6,8])print(s)执行后输出结果如下:通过传递NumPy数组,使用datetime索引和标记列来创建数据帧。【例6.24】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20180101',periods=7)print(dates)print("--"*16)df=pd.DataFrame(np.random.randn(7,4),index=dates,columns=list('ABCD'))print(df)执行后输出结果如下:码:【例6.25】执行上面的示例代码后,输出结果如下:查看数据查看框架的顶部和底部的数据行,参考以下示例代码:【例6.26】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=7)df=pd.DataFrame(np.random.randn(7,4),index=dates,columns=list('ABCD'))print(df.head())print(" "*print(df.tail(3))执行上面的示例代码后,输出结果如下:显示索引、列和底层NumPy数据,参考以下代码:【例6.27】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=7)df=pd.DataFrame(np.random.randn(7,4),index=dates,columns=list('ABCD'))print("indexis:")print(df.index)print("columnsis:")print(df.columns)print("valuesis:")print(df.values)print(df.index)print("columnsis:")print(df.columns)print("valuesis:")print(df.values)执行上面的示例代码后,输出结果如下:描述显示数据的快速统计摘要,参考以下示例代码:【例6.28】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=7)df=pd.DataFrame(np.random.randn(7,4),index=dates,columns=list('ABCD'))print(df.describe())执行上面的示例代码后,输出结果如下:调换数据,参考以下示例代码:【例6.29】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.T)执行上面的示例代码后,输出结果如下:通过轴排序,参考以下示例代码:【例6.30】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.sort_index(axis=1,ascending=False))执行上面的示例代码后,输出结果如下:按值排序,参考以下示例代码:【例6.31】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.sort_values(by='B'))执行上面的示例代码后,输出结果如下:选择区块注意,虽然用于选择和设置的标准Python/NumPy表达式是直观的,可用于交互式工作,但对于生产代码,建议使用优化的Pandas数据访问方法.at、.iat、.loc、.iloc和.ix。获取①选择一列,产生一个系列,相当于df.A,参考以下示例代码:【例6.32】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df['A'])执行上面的示例代码后,输出结果如下:runfile('C:/Users/DLG/.spyder-py3/temp.py',wdir='C:/Users/DLG/.spyder-py3')runfile('C:/Users/DLG/.spyder-py3/temp.py',wdir='C:/Users/DLG/.spyder-py3')2018-11-16 -1.0740022018-11-17 1.4407502018-11-18 1.8123732018-11-19 0.8770452018-11-20 0.3139872018-11-21 0.425046Freq:D,Name:A,dtype:float64②通过[]操作符选择切片行,参考以下示例代码:【例6.33】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df[0:3])print("=========指定选择日期========")print(df['20181116':'20181117'])执行上面的示例代码后,输出结果如下:按标签选择①使用标签获取横截面,参考以下示例代码:【例6.34】 importpandasaspd importnumpyasnpimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.loc[dates[0]])执行上面的示例代码后,输出结果如下:②通过标签选择多轴,参考以下示例代码:【例6.35】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.loc[:,['A','B']])执行上面的示例代码后,输出结果如下:③显示标签切片,包括两个端点,参考以下示例代码:【例6.36】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.loc['20181116':'20181117',['A','B']])print(df.loc['20181116':'20181117',['A','B']])执行上面的示例代码后,输出结果如下:④减少返回对象的尺寸(大小),参考以下示例代码:【例6.37】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20170101',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.loc['20181116',['A','B']])执行上面的示例代码后,输出结果如下:⑤获得标量值,参考以下示例代码:【例6.38】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.loc[dates[0],'A'])执行上面的示例代码后,输出结果如下:runfile('C:/Users/DLG/.spyder-py3/temp.py',wdir='C:/Users/DLG/.spyder-py3')runfile('C:/Users/DLG/.spyder-py3/temp.py',wdir='C:/Users/DLG/.spyder-py3')-1.709403357791696⑥快速访问标量(等同于先前的方法),参考以下示例代码:【例6.39】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.at[dates[0],'A'])执行上面的示例代码后,输出结果如下:runfile('C:/Users/DLG/.spyder-py3/temp.py',wdir='C:/Users/DLG/.spyder-py3')runfile('C:/Users/DLG/.spyder-py3/temp.py',wdir='C:/Users/DLG/.spyder-py3')-0.38763045860339174通过位置选择①通过传递的整数的位置选择,参考以下示例代码:【例6.40】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.iloc[3])执行上面的示例代码后,输出结果如下:②通过整数切片,类似于NumPy/Python,参考以下示例代码:【例6.41】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.iloc[3:5,0:2])执行上面的示例代码后,输出结果如下:③整数位置的列表,类似于NumPy/Python样式,参考以下示例代码:【例6.42】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.iloc[[1,2,4],[0,2]])执行上面的示例代码后,输出结果如下:④明确切片行,参考以下示例代码:【例6.43】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.iloc[1:3,:])执行上面的示例代码后,输出结果如下:⑤明确切片列,参考以下示例代码:【例6.44】importpandasaspdimportnumpyasnpimportpandasaspdimportnumpyasnpdates=pd.date_range('20181116',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df.iloc[:,1:3])执行上面的示例代码后,输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论