pandas库,含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas是基于NumPy数组构建。
pandas常结合数值计算工具NumPy和SciPy、分析库statsmodels和scikitlearn,和可视化库matplotlib等工具一同使用。
5.1 pandas数据结构介绍
pandas的主要数据结构:Series和DataFrame
(1)Series
Series是一种类似于一维数组的对象,由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成:
可通过Series的values和index属性获取其数组表示形式和索引对象:
可创建自定义的索引(Series的索引可以通过赋值的方式就地修改):
1)与普通NumPy数组相比,可通过索引的方式选取Series中的单个或一组值:
2)使用NumPy函数或类似Numpy的运算(如根据布尔类型数组进行过滤、标量乘法、应用数学函数等)都会保留索引值的链接:
3)还可将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射(故它可用在许多原本需要字典参数的函数中):
4)若数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series:
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。
5)可传入排好序的字典的键以改变顺序:
注意:California为新增的州,在sdata中找不到值,故结果为NaN(“非数字”, Not a Number);原sdata中的Utah不在states中,故被从结果中剔除。
6)pandas用isnull和notnull函数检测缺失数据(Series也有类似的实例方法 .isnull() ):
Series类似的实例方法 .isnull() :
*** 7)Series最重要的一个功能:根据运算的索引标签自动对齐数据!(类似数据库的join操作)
8)Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:
(2)DataFrame
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
DataFrame既又行索引也有列索引,可以被看做由Series组成的字典(共用同一个索引)。
1.1 )最常用的DataFrame创建方式
直接传入一个由等长列表或NumPy数组组成的字典:
注:结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列
.head() 方法可用于选取前五行:
DataFrame可通过指定列序列,对所有列按照指定顺序进行排列:
如果传入的列在数据中找不到,就会在结果中产生缺失值:
1.2 )另一种常见的DataFrame数据创建形式是嵌套字典
用嵌套字典传给DataFrame,pandas会被解释为:外层字典的键作为列,内层键作为行索引
内层字典的键会被合并、排序以形成最终的索引。如果明确指定了索引,则会按指定顺序进行排列:
1.3 )由Series组成的字典差不多一样的用法
2)将DataFrame的列获取为一个Series
通过类似字典标记的方式:
属性访问的方式:
注:返回的Series拥有原DataFrame相同的索引
3)通过位置或名称的方式获取行的Series
Ps:loc属性详解:???
4)通过赋值的方式,可以对列进行修改
Ps:将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。
a)如果赋值的时一个Series,则会精确匹配DataFrame的索引,所有空位都将被填上缺失值:
b)为不存在的列赋值,会创建一个新列。关键字del用于删除列
关键字del用于删除列
5)对DataFrame进行转置(交换行和列)
可使用类似NumPy数组的方法 .T:
6)DataFrame构造函数所能接受的各种数据
7)设置DataFrame的index和columns的name属性
8)DataFrame的values属性
跟Series一样values属性也会以二维nadarray的形式返回DataFrame中的数据:
注:如果DataFrame各列的数据类型不同,则值数组的dtype就会选用能兼容所有列的数据类型:
(3)索引对象
pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。
构建Series和DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
Index对象是不可变的,无法对其进行修改。不可变,可使Index对象在多个数据结构之间安全共享:
与Python的集合不同,pandas的Index可以包含重复的标签。
Index的方法和属性: