python pandas库的学习笔记一pandas的数据结构

来源:互联网 发布:用友软件服务合同 编辑:程序博客网 时间:2024/05/14 13:02

要使用pandas,首先要熟悉他的两个主要的数据结构:Series和DataFrame。


一、Series


Series 是一种类似于一维数组的对象,由一组数据(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
仅由一组数据即可产生最简单的Series:

>>> from pandas import Series,DataFrame>>> import pandas as pd>>> obj=pd.Series([4,7,-5,3])>>> obj0    41    72   -53    3dtype: int64
左边是索引,右边是值,这样看起来Series好像更像dict或map这一类具有键值对的结构。
>>> obj.values #值array([ 4,  7, -5,  3], dtype=int64)>>> obj.index #索引对象RangeIndex(start=0, stop=4, step=1)
分别获得值对象与索引对象。

手动指定索引

>>> obj1=Series([4,7,-5,3],index=['a','b','d','c'])>>> obj1a    4b    7d   -5c    3dtype: int64
通过索引取值:

>>> obj1['a']4>>> obj1[['a','d','b']] #获取多个值a    4d   -5b    7dtype: int64
数组运算:

>>> obj1[obj1>0]a    4b    7c    3dtype: int64>>> obj1*2a     8b    14d   -10c     6dtype: int64
既然Series的结构很像dict,自然也可以通过一个dict去创建Series

>>> sdata={'ohio':3500,'Texas':710,'Utah':500}>>> obj2=Series(sdata)>>> obj2Texas     710Utah      500ohio     3500dtype: int64
name属性,Series对象本身及其索引都有一个name属性

>>> obj2.index.name='state'>>> obj2.name='population'>>> obj2state       #索引名Texas     710Utah      500ohio     3500Name: population, dtype: int64 #Series名

二.DataFrame


    DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引,可以被看做是由Series组成的字典。DataFrame中的数据是以一个或多个二维块存放的。

构建DataFrame

>>> data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}>>> frame=DataFrame(data)>>> frame   pop   state  year0  1.5    Ohio  20001  1.7    Ohio  20012  3.6    Ohio  20023  2.4  Nevada  20014  2.9  Nevada  2002
结果会自动加上索引,且全部列被有序排列,注意是列被有序排列,即根据列名有序排列。

指定列的顺序

>>> DataFrame(data,columns=['year','state','pop'])   year   state  pop0  2000    Ohio  1.51  2001    Ohio  1.72  2002    Ohio  3.63  2001  Nevada  2.44  2002  Nevada  2.9
如果传入的列找不到,则会产生NAN

>>> frame2=DataFrame(data,columns=['year','state','pop','debt'] ,index=['one','two','three','four','five'])>>> frame2       year   state  pop debtone    2000    Ohio  1.5  NaNtwo    2001    Ohio  1.7  NaNthree  2002    Ohio  3.6  NaNfour   2001  Nevada  2.4  NaNfive   2002  Nevada  2.9  NaN
取值,通过类似数组或属性的方式,可以获取某一列的数据(为一个Series)

>>> frame2['state'] #类似数组的方式0      Ohio1      Ohio2      Ohio3    Nevada4    NevadaName: state, dtype: object>>> frame2.year #类似属性的方式0    20001    20012    20023    20014    2002Name: year, dtype: int64
注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应的设置好了。
获取行,行也可以通过位置或名称的方式来进行获取,比如用索引字段ix

>>> frame2.ix[2]year     2002state    Ohiopop       3.6debt      NaNName: 2, dtype: object
列可以通过赋值的方式进行修改。如下,我们可以给空的”debt“列赋值一个标量或一组值。
>>> import numpy as np>>> frame2['dept']=np.arange(5) #为不存在的列赋值会创建一个新列>>> frame2['debt']=12>>> frame2   year   state  pop  debt  dept0  2000    Ohio  1.5    12     01  2001    Ohio  1.7    12     12  2002    Ohio  3.6    12     23  2001  Nevada  2.4    12     34  2002  Nevada  2.9    12     4
删除,关键词del用于删除列

>>> del frame2['pop']>>> frame2   year   state  debt  dept0  2000    Ohio    12     01  2001    Ohio    12     12  2002    Ohio    12     23  2001  Nevada    12     34  2002  Nevada    12     4
另一种常见的数据形式是嵌套字典(也就是字典的字典),将它传给DataFrame,就会被解释为:外层字典的键作为列,内层键作为行索引。
>>> pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7, 2002:3.6}}>>> frame3=DataFrame(pop) #使用嵌套字典构造DataFrame>>> frame3      Nevada  Ohio2000     NaN   1.52001     2.4   1.72002     2.9   3.6
对结果进行 转置:
>>> frame3.T        2000  2001  2002Nevada   NaN   2.4   2.9Ohio     1.5   1.7   3.6
设置index和columns的name属性:

>>> frame3.index.name='year'>>> frame3.columns.name='state'>>> frame3state  Nevada  Ohioyear2000      NaN   1.52001      2.4   1.72002      2.9   3.6

可以用于构造DataFrame的数据:

三、索引对象


    pandas的索引对象负责管理标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:

>>> obj=Series(range(3),index=['a','b','c'])>>> obj.indexIndex([u'a', u'b', u'c'], dtype='object')
Idex对象是不可修改的,因此用户不能对其修改。不可修改性非常重要,因为这样才能使得index对象在多个数据结构之间安全共享:
>>> index=pd.Index(np.arange(3))>>> obj2=Series([1.5,-2.5,0],index=index)>>> obj2.index is indexTrue

index的方法和属性:




参考:

《利用python进行数据分析》

原创粉丝点击