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的一些知识,下面的内容会讲一些其它的知识。

 

posted @ 2020-02-29 15:15  木木纸  阅读(224)  评论(1编辑  收藏  举报