pandas入门
数据分析绝对绕不过的三个包是numpy、scipy和pandas。numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。scipy是基于numpy的科学计算包,包括统计、线性代数等工具。pandas是基于numpy的数据分析工具,能更方便的操作大型数据集。后续的章节主要围绕pandas讲解。
numpy和pandas
numpy的数据结构是n维的数组对象,叫做ndarray。Python的list虽然也能表示,但是不高效,随着列表数据的增加,效率会降低。
我们首先载入numpy包,因为它是第三方工具,所以每次使用前必须在代码中载入。as是命名为别名,方便调用,np是numpy约定俗成的简写。
1 import numpy as np 2 3 data1 = [1,2,3,4,5] 4 5 array1 = np.array(data1) 6 7 array1 8 9 array([1,2,3,4,5])#输出结果
创建数组使用numpy中的array函数,调用时要记住加np。我们将系统自带的列表list转换成了numpy中的数组。
1 data2 = [[1,3,4],[2,5,6]] 2 3 array2 = np.array(data2) 4 5 array2 6 7 array([1,3,4], 8 [2,5,6]])
列表会被转换为一个多维数组,它也可以被称为矩阵。array数组需要注意的是,它内部的元素必须为相同的内型,比如数值和字符串。可以用dtype查询其类型,不用加括号,它的数据类型包括int8,int16,int32等,当我们想转换数据式,可以用astype函数
array2.dtype dtype('int64')#array2U21的数据类型为int64 array2_str.dtype = array2.astype('str') array2_str.dtype dtype('<U21')
数组的计算也很方便
1 array1 2 3 array([1,2,3,4,5]) 4 5 array+1 6 7 array([2,3,4,5,6]) 8 9 arrray1 * array1 10 11 array([1 , 4 , 9 , 16 , 25]) 12 13 array1 * 2 14 15 array([2 , 4 , 6 , 8 , 10]) 16 17
数组索引和列表相同,通过方括号和数字即可选择,也可直接赋值
array1[2] 3 array1[-2:] array([4,5]) array1[1] = 1 array1 array([1,1,3,4,5])
可以通过递归对多维数组进行筛选,如果省略了后面的索引,则返回次一级的难度,这一点和list一样
1 array2 2 3 array([[1,3,4], 4 [2,5,6]]) 5 6 array2[0] 7 8 array([1,3,4]) 9 10 array2[0][1] 11 12 3
pandas有两个主要数据结构,Series和DataFrame,记住大小写区分,Series类似一维数组,和numpy的array接近,由一组数据和数据标签组成。数据标签有索引的作用。
1 import pandas as pd 2 3 s = pd.Series([1,2,3,4]) 4 s 5 #下面是结果 6 0 1 7 1 2 8 2 3 9 3 4 10 dtype:int64
上面所有内容都是在Jupyter notebook显示的,上面的结果,右边是我们输入的一组数据,左边是数据的索引,即标签。数据标签是pandas区分于numpy的重要特征。
索引不一定是从0开始的数字,它可以被定义。
1 s=pd.Series([1,2,3,4]),index = ['a','b','c','d']) 2 3 s 4 5 a 1 6 b 2 7 c 3 8 d 4 9 dtype:int64
索引的概念有点像SQL的主键,不过它的功能更强大
1 s.index 2 3 Index(['a','b','c','d'],dtype='object') 4 5 s['a'] 6 7 1 8 9 s[['a','c']] 10 11 a 1 12 c 3 13 dtype:int64
index函数可以显示Series的索引。Series和array一样,通过方括号选取数据,当要选取多个数据时,应该用列表表示多个索引,所以第三个案列嵌套了两层方括号。
如果数据是一个字典,也能直接通过这个字典创建Series
d={'语文':'89','数学':'90'} s2=pd.Series(d) s2 语文 89 数学 90 dtype:object
此时,字典的key就是Series的索引。
s2 = pd.Series(d,index=['语文','数学','英语'] s2 语文 89 数学 90 英语 NAN dtype:object
Series有自动对齐索引的功能,当定义的索引英语和字典对不上是,会自动选择NaN,即结果为空,表示缺失。缺失值的处理会在后续讲解。
这次就只讲了一下pandas和Series的一些知识,下面的内容会讲一些其它的知识。