引入pandas和常用的数据结构Series,DataFrame
一、pandas的数据结构的介绍
1.Series
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:
默认索引是一个从0-N-1(N为数据长度)的整数型索引。你可以通过Series的values和index属性获取其数组表示形式和索引对象:
可以通过index创建自己想要的索引:
可以通过索引选取一个或者一组值,或者对其进行修改:
NumPy数组运算都会保留索引和数值之间的链接:
还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。它可以用在许多原本需要字典参数的函数中:
如果数据被存在一个Python字典中,也可以直接通过这个字典来创建Series:
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。
在这个例子中,sdata中跟states索引相匹配的那3个值会被找出来并放到相应的位置上,但由于California所对应的sdata值找不到,就用NaN代替。在pandas中,可以用isnull和notnull
函数来检测缺失数据:
Series也有类似的方法:
对于许多应用而言,Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:
Series的索引值可以通过赋值的方式就地修改:
2、DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
注意:虽然DataFrame是以二维结构保存数据的,但你仍然可以轻松的将其表示为更高维的数据。
构建DataFrame的办法有很多,最常用的是直接传人一个由等长列表或NumPy数组组成的字典:
debt没有值,自动填充为NaN
3、索引对象
pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
Index对象是不可修改的(immutable),因此用户不可对其修改:
不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享。
二、基本功能
1、重新索引
pandas对象的一个重要方法是reindex,其作用是创建一个适应新索引的新对象。
例子:
DataFrame和Series之间的运算差不多也是如此,默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播:
如果某个索引值在DataFrame的列或者Series的索引中找不到,则参与运算的两个对象就会重新索引以形成并集:
如果你希望匹配行且在列上广播,则必须使用算术运算方法。例如:
函数应用与映射
NumPy的ufunc(元素级数组方法) 也可用于操作pandas对象:
另一个常见操作是,将函数应用到由各列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能: