Pandas之Series

这个东西相当烦人,之前一直没重视,后来他在我神经网络的学习中给我制造了很大的麻烦,所以这里特别记一下,引用的别人的博客,毕竟这也不是什么难的重点,只是一些基础知识的总结。

前面用了5篇文章简单介绍了Python非常重要的库:Numpy,Numpy用来进行数值计算,是数据分析、机器学习的基础库。从本文开始为大家介绍Python另外一个非常重要的库:Pandas,Pandas是数据分析的常用工具,也是基于Numpy的。之前在介绍Numpy时反复强调Numpy的核心概念是Ndarray,在Pandas中同样也有类似的核心概念:Series和DataFrame,由于Ndarray要求元素保持一样的数据类型,因此Numpy通常用来处理单一类型的数据,而Series可以保存不同的数据类型,因此Pandas在处理表格和混杂类型的数据方面有着广泛的应用。

Pandas之Series_第1张图片

Series对象的创建

Series是Pandas中的一维数据结构,类似于Python中的列表和Numpy中的Ndarray,不同之处在于:Series是一维的,能存储不同类型的数据,有一组索引与元素对应。下图的代码是Series的一个简单示例。

Pandas之Series_第2张图片图1 Series简单示例

与Numpy类似,Pandas的引入也使用语句“import pandas as pd”,pd作为Pandas的别名是通用写法;第3行创建了一个名为s1的series对象,本例中传入的是一个包含4个整型数值的列表,传入元组、字典都是可以的,如果传入字典,字典的键key和值value将自动转换成series对象的索引和元素;由s1的打印结果可知:series对象不仅包含数值,还包含一组索引,由于在创建series对象时没有指定索引,因此会默认使用非负整数当做索引。

在创建series对象时我们可以手动设置索引,如下图:

Pandas之Series_第3张图片图2 手动设置series索引

第3行我们创建了series对象s2,包含四个字符串,索引依次设置为'a','b','c','d';打印的最后一行,s2元素类型dtype为object,注意Pandas中整型为int64,浮点型为float64,字符串、布尔型等其他数据类型都为object。

在series对象中,索引与元素之间是一种映射关系,元素在series对象中的有序存储是通过索引实现的,当传入字典创建series对象,可以通过指定索引的方式对series对象中的元素进行排序和过滤。

Pandas之Series_第4张图片图3 字典和索引创建series对象

对比字典scores和列表names我们发现:scores中的键顺序与names中元素顺序不一致,scores中没有的键为“tracy”的数据,names中没有“tom”;第4行创建series对象s3时以索引(列表names)为依据,names中没有的元素(tom)将被过滤掉,scores中没有tracy的分数,将会被NaN代替;从最后的打印结果可以看出:s3是以索引names排序的,由于NaN是浮点型,因此s3中的数据类型自动转换成float64。

Series元素的访问

Series对象的元素也可以像列表和ndarray一样通过[index]的方式访问,需要注意的是:如果在创建series对象时指定了整型之外的其他类型的索引,默认的整数索引仍然可用。如下图的代码所示:使用s2[1]和s2['b']得到的值是完全相同的。当然也可以使用 s2[1] = 'banana' 或 s2['b'] = 'banana' 语句在原地对series对象s2进行修改。

Pandas之Series_第5张图片图4 series元素的访问

除了元素的值之外,索引也可以修改,下图中的示例将s2的索引由字符串型改为整型。

Pandas之Series_第6张图片图5 series对象修改索引

第5行将s2的索引修改为1到4的整数列表,修改后可以不用字符串索引访问元素,新的整数索引[1, 2, 3, 4]将覆盖默认的整数索引[0, 1, 2, 3],此时第6行s2[1]将得到s2中的第一个元素“alpha”,而第7行s2[0]将报出索引错误(IndexError);与修改元素一样,对索引的修改都是在原地进行,不会在内存中进行复制操作。

你可能感兴趣的:(机器学习,pandas,series)