Pandas是一个由python编写的库,其中包含了大量数据类型和函数。起初,Pandas是作为金融数据分析工具而被开发出来,如今它已经应用于多个领域的数据分析、挖掘。Pandas拥有两个重要的数据类型:Series和DataFrame,简单来讲,Series就像一个一维的数组,而DataFrame就像一个二维的表格。而本篇博客的主要内容是对DataFrame结构体的浅析。
DataFrame的参数简介
DataFrame的官方定义如下:
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
其中的参数解释如下:
- data:需要导入的数据,允许的数据类型为array(numpy的数据类型)、dict(字典)、list(列表)、DataFrame。
- index:行标签,默认为0开始的等差数列。
- columns:列标签,默认为0开始的等差数列。
- dtype:指定数据类型
- copy:从输入值中拷贝数据,只对输入为DataFrame或者二维数组时有影响
对参数的图解
字典是最常用的数据类型,是python自带的,下面用该类型作为参数data输入来解释其他参数。
导入库
通过import来导入pandas库,由于pandas中有些函数和数据类型需要用到numpy中的数据类型,所以也需要导入numpy库。
通过字典定义一个简单DataFrame类型
首先定义一个简单的字典,字典内每一个key的值都为一个list(列表),再作为data导入到DataFrame中,生成一个简单的DataFrame。
可以看到,这个最简单的DataFrame,行标签是以0开始的等差数列,而列标签是字典中的key,每一行的值都是字典中key的list对应位置的值。可以看到,由于list是有序的,所以每条列标签下的数据都是按定义时排列的,但由于字典是无序的,所以列标签的顺序是不按定义排序的。
那么怎么使列标签按我们想要的顺序排序?需要使用columns参数:
从图中可以看到,当我们定义columns函数,列表标签就如我们所想的顺序排列。但是如果参数columns传入时和字典中的key不匹配会怎么样?
通过上面三种不匹配方式:多、少、错,可以分析出当定义columns参数时,DataFrame会先按columns定义的构造表格(按顺序),然后再去字典中搜索匹配的key,如果不存在,那所有数据都为NaN。
如果不希望行标签按默认的等差数列排序,那可以用index参数来定义:
可以看到,index定义了行标签,其性质与columns相同,只是一个定义行,一个定义列。所以当参数中index和columns被使用时,DataFrame会优先按这两个参数构造表格,再去字典中搜索匹配,匹配失败的都为NaN。
当使用dtype参数时,数据都会被转化成制定的类型,当然该参数只对数字型数据有效,string和bool都不受影响。
其他data数据类型定义DataFrame
DataFrame定义时data参数允许的数据类型不止字典,还可以是list、array、DataFrame。DataFrame就不说,用自己去定义自己,我也不知道为什么谁会都这么迷的方式去定义,但原则上确实是可以理解的。而list和array在某种意义上十分相似,唯一的不同是,list允许内部值值数据类型不同,而array不允许。
值得注意的是,使用list或array定义数据的时候,每一个内部的list都代表一行的数据,这与字典不同,字典中每一个list都代表一列的数据。其他参数都与前面使用基本相同,而值得注意的是,当在list或array作为数据导入时,定义columns参数时,将不依靠匹配来填充表格,而是纯粹靠位置信息来填充。
获取DataFrame的信息
DataFrame中拥有许多直接获取信息的函数和属性,可以直接调用,十分方便。
首先定义一个简单的DataFrame作为测试:
获取列标签信息、行标签信息、数据信息:
想要使用操作时,可以使用.tolist()函数将数据类型转化为list,然后当做list去操作:
总结
本章讲解了如何定义一个DataFrame类型的数据类型,并详细介绍了不同参数的用法以及DataFrame的基础信息获取,下一章将详细讲解如何对DataFrame进行行列操作。