5.1. 数据结构
5.1.1 series
1.包含values, index 两个属性
obj.values
obj.index
2.创建索引序列
obj2=pd.series([4,7,-5,3], index=['d','b','a','c'])
# 按照位置赋值的方式改变series索引
obj.index=['box', 'steve', 'jeff', 'ryan']
3.可以使用标签进行索引
obj2['d']
4.使用字典生成一个series:series可以看成一个长度固定且有序的字典,
- 因为索引值和数据值按位置匹配
- series的索引是排好序的字典键
sdata={'ohio':35000, 'texas':71000, 'oregon':16000, 'utah':5000} # 创建字典
obj3=pd.series(sdata)
5.查找缺失值isnull()函数,notnull();返回布尔值bool
pd.isnull(obj)
pd.notnull(obj)
5.2 data frame
1.定义
- 是二维矩阵形式
- 既有列索引,又有行索引
- 列集合,每一列的值类型可能不同
#用series创建dataframe,df会自动分配索引
data={'state':['ohio','ohio','ohio','nevada'],
'year':[2000,2001,2002,2001],
'pop':[1.5,1.7,3.6,2.4]}
frame=pd.dataframe(data)
2.函数head(),返回前5行
frame.head()
3.指定列的顺序
pd.dataframe(data,columns=['year','state','pop'])
4.进行行选取;检索series,按字典标记 或 属性
frame2['state']
frame2.year
5.进行列选取;通过位置或特殊属性loc进行选取
frame.loc['three']
6.修改列
- 将列表或数组赋值给一个列:值的长度必须与df的值长度相匹配
frame['debt']=16.5
frame['debt']=np.arange(6.)
- 将series的值赋给一列:series的索引将按照df的索引重新排列,并进行缺失值填充
val=pd.series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt']=val
- 如果被赋值的列不存在,则将生成一个新的列
7.判断state是否存在
#先进行赋值,再判断是否为‘ohio’,返回bool值
frame['eastern']=frame.state=='ohi0'
8.删除列,del()函数
del frame['eastern']
9.嵌套字典
pop={'nevada':{2001:2.4, 2002:2.9},
'ohio':{2000:1.5, 2001:1.7, 2002:3.6}}
- pandas将字典的键作为列,内部字典的键作为行
- 内部字典的键被联合和排序后形成了结果的索引
10.转置
frame.t
11.df的value属性,返回二维的ndarry的形式返回
frame.values
5.1.3索引对象
1.索引对象:
- 用于存储轴标签和其他元数据
- 在构造series和dataframe时,使用任意数组或标签序列都会变成索引对象
3.性质:
- 索引对象是不可变的
- 类似一个固定大小的集合
- 可以包含重复的标签
5.2 基本功能
5.2.1 重建索引
1.series调用reindex
obj2=obj.reindex(['a','b','c','d','e'])
3.reindex 可以实现行索引,列索引或者可以同时改变二者
- 顺序数据
重建索引可能会需要进行插值和填值,可选参数(例如:ffill,前向填充) - 行插值
obj.reindex(range(6),method='ffill')
- 列插值使用columns关键字
frame=pd.dataframe(np.arange(9).reshape(3,3),index=['a','c','d'], columns=['ohio','texas','california'])
- 或者使用loc进行标签检索
frame.loc[['a','b','c','d'],states]
5.2.2 轴向上删除条目
1.按照行标签进行删除
#删除名称为colorado和ohio的两行
data.drop(['colorado','ohio'])
2.按照列标签进行删除
- 使用axis=1, axis=‘columns’
#删除列名称为two的一列
data.drop('two',axis=1)
3.drop回修改series, dataframe 的尺寸和形状,直接操作原对象不反悔新对象
- inplace=true清除被删除的数据
obj.drop('c',inplace=true)
5.2.3 索引,选择和过滤
1.series索引值
obj[2:4]#返回第3,4行数据(index=2,3)
obj[obj<2]#返回前两行数据
2.dataframe
- bool值数组切片或选择数据
data[:2]# 返回前两行
data[data['three']>5]# 列名称'three'>5, 的数据返回
- 使用bool值dataframe进行检索
data<5
- bool值dataframe,对标量值进行比较产生
data[data<5]=0
3.使用loc和iloc选择数据
- 轴名称标签(轴索引,轴标签)
data.loc['colorado',['two','three']]
- 轴数字标签(整数索引,整数标签)
data.iloc[2,[3,0,1]]
5.2.4 整数索引
- 整数索引,由于数据结构不同,会出现歧义
5.2.5 整数索引与算数
1.两个dataframe进行算数计算, + / - /
- 当两个dataframe,其中有没有匹配到的行或列是,返回值会缺失
2.使用填充值的计算方法
#df1+df2, 在缺失值上补零
df1.add(df2,fill_value=0)
3.广播机制:
-
算数运算对每一行(列)进行操作
-
列进行操作; axis=‘index’ 或 axis=0
#frame-series,
frame.sub(series, axis='index')
5.2.6函数应用和映射
1.apply()
#函数f,求最大值减最小值
f=lambda x: x.max()-x.min()
#在frame中每一列,使用函数f
frame.apply(f)
#在frame中每一行,使用函数f
frame.apply(f,axis='columns‘)
2.applymap:每个浮点数计算一个格式化字符串
format=lambda x: '%.2f'%x
frame.applymap(format)
frame['e'].map(format)
5.2.7排序和排名
5.2.7.1 排序
1.sort_index方法,返回一个新的,排好序的对象
- 对index进行排序
frame.sort_index()
- 对列排序
frame.sort_index(axis=1)
- 降序排序
frame.sort_index(axis=1,ascending=false)
2.对series的值进行排序,使用sort_values方法
obj.sort_values()
- 缺失值会被排到series尾部
3.对dataframe排序,可以使用一列或多列作为排序键
frame.sort_values(by='b')
5.2.7.2排名
1.排名:对数组从1到有效数据点总数,分配名词
- rank方法:通过平均排名分配到每个组来打破平级关系
obj.rank()
- 按照观察顺序进行分配
obj.rank(metod='first')
- 降序,将值分配给组中的最大排名
obj.rank(ascending=false,method='max')
- dataframe,对行或列计算排名
frame.rank(axis='columns')
5.2.8 含有重复标签的轴索引
- is_unique属性
obj.index.is_unique
- 对dataframe 进行索引
df.loc['b']
5.3 描述性统计的概述与计算
5.3.1.1 归约统计
1.sum方法,返回列上加和的值
做行加和是,axis=1 或 axis=‘columns’
df.sum()
df.sum(axis=1)
2.处理缺失值
- 默认下,na值被自动排除
- 通过禁用skipna
df.mean(axis='columns',skipna=false)
3.间接统计信息
- 例如返回最大值或最小值的索引
df.idxmax()
5.3.1.2 积累型方法
df.cumsum()
5.3.1.3 一次性产生多个汇总的统计
- 对于数值型数据
df.describe()
- 对于非数值型数据
obj=pd.series(['a','a','b','c']*4)
obj.describe()
#仅返回 数字统计 或 单个数值结果 的统计
5.3.2 相关性和协方差
pandas-datareader库
- corr():计算相关性,计算两个series中重叠的,非na的,按索引对其的值的相关性
- cov():计算协方差
- corrwith():计算 行 或 列 与另一个series或df的相关性
5.3.3唯一值,计数和成员属性
1.唯一值
pd.unique()#返回唯一值, 不排序
pd.unique,sort() #返回唯一值, 并进行排序
2.计数
obj.value_counts()
3.检查成员属性
obj.isin()
- 将数据集一series 或 dataframe 一列的形式进行 过滤为数据集的值子集
#若obj中某列元素是‘b’,'c'; 则返回true 否则返回false
obj.isin(['b','c'])
- index.get_indexer方法:提供索引数组,将非唯一数组转换为另一个唯一值数组
#返回分类后的组别
index(唯一值的数组).get_indexer(原数组)