pandas数据结构介绍

pandas是基于NumPy构建的,它以NumPy为中心的应用变得更加简单。
pandas的数据结构介绍
Series

Series是一种类似于一维数组的对象,它由一组数据(各种Numpy的数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series
obj=Series([4,7,-5,3])
Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引,于是会自动创建一个从0到N-1的整数型索引。
values和index属性获取其数组表示形式和索引对象。
obj.values
array([4,7,-5,3])
obj.index
Int64Index([0,1,2,3])
创建一个带有可以对Series可以对各个数据点进行标记的索引:
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
obj2
d 4
b 7
a -5
c 3
与Numpy数组相比,可以通过索引的方式选取Series中的单个或一组值:
obj['a']的值是-5,obj2[['c','a','d']] c 3 a -5 d 6
Numpy数组运算都会保留索引和值之间的链接:
可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。
‘b’ in obj2 True
如果数据存放在一个Python字典中,也可以直接通过这个字典来创建Series:
sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)
states=['California','Ohio','Oregon','Texas']
obj4=Series(sdata,index=states)
sdata中跟states索引相匹配的那3个值会被找出来并放到相应的位置上,但由于'California'所对应的sdata值找不到,所以其结果就为NaN。pandas的isnull和notnull函数可用于检测缺失数据。Series也有类似的实例方法。


Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。
Series对象及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切


Series的索引可以通过赋值的方式就地修改:


DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做有Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比(如R的data,frame),DataFrame中面向行和列的操作基本上是平衡的。其实,DataFrame中面向行和列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的。
构建DataFrame的方法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:
data={'state':['Ohio','Ohio','Nevada','Nevada'],'year:[2000,2001,2002,2001,2002]','pop':[1.5,1.7,3.6,2.4,2.9]}
frame=DataFrame(data)
DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列


跟Series一样,如果传入的列在数据中找不到,就会产生NA值:
frame2=DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])


通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
frame2['state']
frame2.year


注意:返回的Series拥有原DataFrame相同的索引,且其name属性也已经相应地设置好了。行也可以通过位置或名称的方式进行获取,比如索引字段ix:
frame2.ix['three']
列可以通过赋值的方式进行修改。例如,我们可以给那个空的'debt'列附上一个标量值或一组值:
frame2['debt']=16.5
frame2['debt']=np.arange(5.)


将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将填上缺失值:
val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt']=val


为不存在的列赋值会创建出一个新列。关键字del用于删除列:
frame2['eastern']=frame2.state=='Ohio'


另一种常见的数据格式是嵌套字典
pop={'Nevada':{2001:2.4,1002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
如果将它传给DataFrame,它就会被解释为:外层字典的键作为列,内层键则作为行索引:
frame3=DataFrame(pop)


由Series组成的字典差不多也是一样的用法


索引对象
pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
obj=Series(range(3),index=['a','b','c'])
index=obj.index
Index对象是不可修改的(immutable),因此用户不能对其进行修改。不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享:
index=pd.index(np.arrange(3))
obj2=Series([1.5,-2.5,0],index=index)
obj2.index is index
True


下表列出了pandas库中内置的Index类。

pandas中主要的Index对象
说明
Index最泛化的Index对象,将轴标签表示为一个由Python对象组成的NumPy数组
Int64Index针对整数的特殊Index
MultiIndex"层次化"索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组
DatatimeIndex存储纳秒级时间戳
PeriodIndex针对Period数据(时间间隔)的特殊Index

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值