pandas是基于numpy构建的,使得数据分析工作变得更快更简单的高级数据结构和操作工具。
一、pandas数据结构
两个主要的数据结构:Series和DataFrame。
1.1 Series
Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成,仅由一组数据即可产生最简单的Series.
Series的字符串表现形式为:索引在左边,值在右边。如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。可以通过Series的values和index属性获取其数组表现形式和索引对象:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
#**********************************Series*************************************
obj=Series([2,4,7,8,9,3])
'''obj=
0 2
1 4
2 7
3 8
4 9
5 3
dtype: int64
'''
obj.values #return:array([2, 4, 7, 8, 9, 3], dtype=int64)
obj.index #return: RangeIndex(start=0, stop=6, step=1)
#创建对数据点进行标记的索引
obj2=Series([2,4,7,8,9,3],index=['a','b','c','d','e','f'])
'''obj2=
a 2
b 4
c 7
d 8
e 9
f 3
dtype: int64
'''
obj2.index #return:Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
#利用索引的方式选取Series的单个或一组值
obj2['c'] #return:7
obj2[['a','c','f']]
'''out:
a 2
c 7
f 3
dtype: int64
'''
#numpy数组运算(布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接
obj2[obj2>5]
obj2*2
np.exp(obj2)
'''
obj2[obj2>5]: obj2*2: np.exp(obj2):
c 7 a 4 a 7.389056
d 8 b 8 b 54.598150
e 9 c 14 c 1096.633158
dtype: int64 d 16 d 2980.957987
e 18 e 8103.083928
f 6 f 20.085537
dtype: int64 dtype: float64
'''
#可以将Series看成是一个有定长的有序字典,因为它是索引值到数据值的一个映射
#因此,一些字典函数也可以在这里使用:
'a' in obj2 #return:True
'h' in obj2 #return:False
2 in obj2.values #return:True
#利用字典创建Series
dic={'l':1,'z':2,'h':3}
obj3=Series(dic)
'''obj3=
h 3
l 1
z 2
dtype: int64
'''
#若索引比字典的索引多,则与字典索引相匹配的则会被找到,并放置到相应的位置中
#而对应字找不到的索引,其结果则为NaN(即非数字,Not a Number,在pandas中,用于表示缺失或NA值)
ind=['l','z','h','a']
obj4=Series(dic,index=ind)
'''obj4=
l 1.0
z 2.0
h 3.0
a NaN
dtype: float64
'''
#pandas中isnull和notnull函数用于检测缺失数据:
pd.isnull(obj4) #等效于: obj4.isnull()
pd.notnull(obj4)
'''
pd.isnull(obj4): pd.notnull(obj4)
l False l True
z False z True
h False h True
a True a False
dtype: bool dtype: bool
'''
#算术运算中自动对齐不同索引的数据
obj3+obj4
'''out:
a NaN
h 6.0
l 2.0
z 4.0
dtype: float64
'''
#Series对象本身及其索引都有一个name属性
obj4.name='myname'
obj4.index.name='letter'
'''obj4=
letter
l 1.0
z 2.0
h 3.0
a NaN
Name: myname, dtype: float64
'''
#索引可以通过赋值的方式进行改变
obj4.index=['li','zi','hua','a']
'''obj4=
li 1.0
zi 2.0
hua 3.0
a NaN
Name: myname, dtype: float64
'''
1.2 DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(公用同一个索引)。跟其他类似的数据结构相比,DataFrame中面向行和面向列的操作基本是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或者别的一维数据结构)。
其中,可以输入给DataFrame构造器的数据类型及相关说明:
#*******************************DataFrame*************************************
import numpy as np
import pandas as pd
from pandas import Se