您的位置:首页 > 理论基础 > 数据结构算法

pandas数据结构基础

2016-06-16 11:25 387 查看

Series

Series是一种类似于一维数组的对象,它由一组数据和与之相关的索引组成,创建一个简单的Series对象:

>>> from pandas import Series
>>> a=Series([3,4,-9,2])
>>> a
0    3
1    4
2   -9
3    2
dtype: int64


Series对象的索引在左边,值在右边,由于我们没有指定索引,所以会自动创建一个1到N的索引,可以通过values和index属性来获得值和索引:

>>> a.values
array([ 3,  4, -9,  2], dtype=int64)
>>> a.index
Int64Index([0, 1, 2, 3], dtype='int64')


我们可以自定义索引值:

>>> b=Series([2,3,1,4],index=['x','y','w','z'])
>>> b
x    2
y    3
w    1
z    4
dtype: int64
>>> b.index
Index([u'x', u'y', u'w', u'z'], dtype='object')


可以通过索引的方式选取Series中的一个或多个值:

>>> b['y']
3
>>> b['x']=11
>>> b[['x','y']]
x    11
y     3
dtype: int64


数组运算会保留索引和值之间的连接关系:

>>> b*2
x    22
y     6
w     2
z     8
dtype: int64


如果数据被存放在字典中,也可以通过字典来创建Series,并且字典的键就是Series的索引

>>> dics={'marry':18,'tom':19,'terry':20,'joe':23}
>>> c=Series(dics)
>>> c
joe      23
marry    18
terry    20
tom      19
dtype: int64


在下面的这里例子中,dics中跟索引ks相对应的三个值被找到,而sara对应的dics值找不到,其结果就为NaN,表示缺失值,可以通过isnull函数检测是否为缺失值

>>> ks=['marry','tom','terry','sara']
>>> d=Series(dics,index=ks)
>>> d
marry    18
tom      19
terry    20
sara    NaN
dtype: float64


>>> d.isnull()
marry    False
tom      False
terry    False
sara      True
dtype: bool


Series一个非常重要的功能是自动对齐索引:

>>> c+d
joe     NaN
marry    36
sara    NaN
terry    40
tom      38
dtype: float64


DataFrame

DartaFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引,也有列索引。构建DataFrame的方法有多种,一个常用的方法是直接传入由等长列表或numpy数组组成的字典:

>>> from pandas import DataFrame
>>> data={'name':['Marry','Bob','Tom','Sara'],
...       'sex':[0,1,1,0],
...       'year':[20,23,21,19]}
>>> frame=DataFrame(data)
>>> frame
name  sex  year
0  Marry    0    20
1    Bob    1    23
2    Tom    1    21
3   Sara    0    19


从输出结果可以看到自动添加了行索引,和Series一样。如果指定列的顺序,就会按照指定的顺序排序:

>>> DataFrame(data,columns=['year','name','sex'])
year   name  sex
0    20  Marry    0
1    23    Bob    1
2    21    Tom    1
3    19   Sara    0


如果指定的列不存在,就会产生NaN值,这点和Series是一
4000
样的

>>> frame2=DataFrame(data,columns=['name','sex','year','country'])
>>> frame2
name  sex  year country
0  Marry    0    20     NaN
1    Bob    1    23     NaN
2    Tom    1    21     NaN
3   Sara    0    19     NaN


可以通过赋值的方式对列进行修改,比如给country赋值为china:

>>> frame2['country']='china'
>>> frame2
name  sex  year country
0  Marry    0    20   china
1    Bob    1    23   china
2    Tom    1    21   china
3   Sara    0    19   china


如果赋值的是一个Series,就会精确匹配DataFrame索引,索引未匹配的全部为缺失值:

>>> from pandas import Series
>>> ct=Series(['18','17'],index=[0,2])
>>> frame2['year']=ct
>>> frame2
name  sex year country
0  Marry    0   18   china
1    Bob    1  NaN   china
2    Tom    1   17   china
3   Sara    0  NaN   china


del 用于删除列

>>> del frame2['country']
>>> frame2.columns
Index([u'name', u'sex', u'year'], dtype='object')


也可以对结果进行转置:

>>> frame2.T
0    1    2     3
name  Marry  Bob  Tom  Sara
sex       0    1    1     0
year     18  NaN   17   NaN


下表列出了DataFrame所能接受的各种数据:



values属性会以二维数组的形式返回DataFrame数据:

>>> frame2.values
array([['Marry', 0L, '18'],
['Bob', 1L, nan],
['Tom', 1L, '17'],
['Sara', 0L, nan]], dtype=object)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python pandas