赵走x博客
网站访问量:151571
首页
书籍
软件
工具
古诗词
搜索
登录
Python与数据挖掘:16、Bokeh
Python与数据挖掘:15、Matplotlib
Python与数据挖掘:14、scikit-learn
Python与数据挖掘:13、Scipy
Python与数据挖掘:12、Pandas
Python与数据挖掘:11、numpy
Python与数据挖掘:10、Python实用模块介绍
Python与数据挖掘:9、面向对象编程
Python与数据挖掘:8、函数
Python与数据挖掘:7、Python基础入门---文件的读写
Python与数据挖掘:6、Python基础入门---数据结构
Python与数据挖掘:5、Python基础入门---流程控制
Python与数据挖掘:4、Python基础入门---数字数据
Python与数据挖掘:3、Python基础入门---常用操作符
Python与数据挖掘:2、Python开发环境的搭建
Python与数据挖掘:1、数据挖掘概述
Python与数据挖掘:12、Pandas
资源编号:75863
书籍
Python 与数据挖掘
热度:166
Pandas模块是一个强大的数据分析和处理工具。它提供快速、灵活、富有表现力的数据结构,能为复杂情形下的数据提供坚实的基础分析功能。
Pandas模块是一个强大的数据分析和处理工具。它提供快速、灵活、富有表现力的数据结构,能为复杂情形下的数据提供坚实的基础分析功能。所谓复杂情形,可能有以下3种: * 数据库表或Excel表,包含了多列不同数据类型的数据(如数字、文字)。 * 时间序列类型的数据,包括有序和无序的情形,甚至是频率不固定的情形。 * 任意的矩阵型/二维表/观测统计数据,允许独立的行或列带有标签。 对于数据科学家,和数据打交道的流程可以分为几个阶段:清洗数据、分析和建模、组织分析的结果并以图表的形式展示出来。举个例子,如果我们要处理多个城市一段时间内的天气观测数据,那可能会对数据分析工具提出以下需求:处理丢失的部分数据记录、取出某城市的相关数据子集、将分析结果合并、对数据做分组聚合等。幸运的是,这些功能在Pandas模块中都已经被实现,并且提供了方便的函数接口。 接下来,将会详细介绍Pandas模块中基本的高级数据结构,以及学习如何使用Pandas模块中经典的数据分析和处理方法,以提高数据分析的效率。 官方提倡的模块导入语法为: ``` import pandas as pd ``` # 1.Pandas中的高级数据结构 为了开始使用Pandas,你需要熟悉两个重要的数据结构:系列(Series)和数据框(DataFrame)。有了它们,你可以利用Pandas在计算机内存中构建一个虚拟的数据库。 # 2.数据框 我们首先介绍数据框,它的结构与矩阵神似,但与矩阵不同。数据框中每列表示一个变量,每行则是一次观测,行列交汇的某个单元格,对应该变量的某次具体的观测值,如图5-1所示。  图5-1 数据框示例 数据框有行和列的索引(index),能让你快速地按索引访问数据框的某几行或某几列,在DataFrame里的面向行和面向列的操作大致是对称的。 有很多方法来创建一个数据框,但最常用的是用一个包含相等长度列表的字典或NumPy数组来创建。需要注意的是:数据框创建时会根据内置的多种规则对数据进行排序,导致结果的行列位置可能不一样,但数据的对应关系不会出现任何错位。代码清单为创建数据框实例。 ``` import pandas as pd #为pandas取一个别名:pd data={ 'id':['Jack','Sarah','Mike'], 'age':[18,35,20], 'cash':[10.53,500.7,13.6] } # 调用构造函数并将结果赋值给df df=pd.DataFrame(data) print(df) ``` 运行结果: ``` id age cash 0 Jack 18 10.53 1 Sarah 35 500.70 2 Mike 20 13.60 ``` 从上述代码的输出可以观察到:由于没有显式声明,行索引自动分配,并且对列名(列索引)进行了排序。而下面代码应用了pd.DataFrame()中更高级的参数设置,显式地声明了列名排序方式和行索引。 ``` df2=pd.DataFrame(data,columns=['id','age','cash'],index=['one','two','three']) print(df2) ``` 运行结果: ``` id age cash one Jack 18 10.53 two Sarah 35 500.70 three Mike 20 13.60 ``` 获取数据框中的某一列是非常方便的,我们只需要呼唤它的名字,如代码所示: ``` print(df2['id']) ``` 运行结果: ``` one Jack two Sarah three Mike Name: id, dtype: object ``` # 3.系列 代码清单5-8实际上得到了一个系列。顾名思义,系列是对同一个属性进行多次观测之后得到的一列结果。用统计学的语言说,它们服从某种分布。我们可以认为,系列是一种退化的数据框,也可以认为它是一种广义的一维数组。在默认情况下,系列的索引是自增的非负整数列(0,1,2,3,…)。值得注意的是,同个系列的数据共享一个列名,而数组不要求。在时间序列(Time Series)的相关问题中,系列(Series)这一数据结构有宝贵的价值。创建系列的代码: ``` s=pd.Series({'a':4,'b':9,'c':16},name='number') print(s) ``` 运行结果: ``` a 4 b 9 c 16 Name: number, dtype: int64 ``` # 4.基础数据处理方法 系列可以认为是数据框的一个子集。因此,应首先关注系列的基础操作。下面代码为按下标访问数据的实例。 ``` print(s[0]) print('*'*30) print(s[:3]) ``` 运行结果: ``` 4 ****************************** a 4 b 9 c 16 Name: number, dtype: int64 ``` 类似于数组,系列支持按索引访问内容,如下面代码所示。更有趣的是,系列还支持类似字典的访问方式——按键值(列名)访问。 ``` print(s['a']) # 如果系列中本身没有这个键值,则会新增一行 s['d']=25 print('*'*30) print(s) ``` 运行结果: ``` 4 ****************************** a 4 b 9 c 16 d 25 Name: number, dtype: int64 ``` 同时,作为一种高级数据结构,系列同样支持向量化操作。也就是说,我们能够同时对一个系列的所有取值执行同样的操作,一致地应用某种方法,如下所示: ``` import numpy as np print(np.sqrt(s)) print('*'*30) print(s*s) ``` 运行结果: ``` a 2.0 b 3.0 c 4.0 d 5.0 Name: number, dtype: float64 ****************************** a 16 b 81 c 256 d 625 Name: number, dtype: int64 ``` 数据框可被看作是一个字典,其中字典的键是系列对应的名字(列名),字典的取值是系列所有的观测值,因此,增、删、改、查等操作的语法大致是相同的,如下面代码所示: ``` print("按列名访问") print(df['id']) print('*'*30) df['rich']=df['cash']>200.0 print(df) print('*'*30) del df['rich'] print(df) ``` 运行结果: ``` 按列名访问 0 Jack 1 Sarah 2 Mike Name: id, dtype: object ****************************** id age cash rich 0 Jack 18 10.53 False 1 Sarah 35 500.70 True 2 Mike 20 13.60 False ****************************** id age cash 0 Jack 18 10.53 1 Sarah 35 500.70 2 Mike 20 13.60 ``` 随着读者研究的不断深入,很快便会在阅读Pandas官方文档的过程中意识到:许多数据框能够支持的功能,如统计频数和分组聚集等,都能够在系列下找到相似的实现;只不过数据框允许你对多列的数据同时进行操作,如以多个标准(性别×年龄)分组。 由于篇幅所限,在此仅能给读者介绍基本的概念和用法。下面附一张Pandas常用方法清单,如表5-2所示,帮助读者更快掌握利用Pandas进行数据分析和处理的基本要领。  表5-2 Pandas常用方法清单 由上述方法体现的功能可看出,Pandas模块已经为各种数据分析与处理的刚需实现了对应的方法。在官方文档中将能看到更多详细的参数设置说明。相信拥有了这一把“瑞士军刀”,读者进行数据分析时将会如鱼得水。Pandas模块支持我们将数据快速读入内存之中,并以此创建一个数据框。简而言之,有了Pandas,我们就能拥有一个“内存中的数据库”。希望读者记住,我们能够通过SQL语句对数据库完成的操作,在数据框中都能更有效率地完成。唯一的不足之处是:内存通常是非常有限的资源。 [[1]]Pandas官方文档网址:http://pandas.pydata.org/pandas-docs/stable/api.html