数据分析-第五章pandas

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(原数组)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值