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

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


一、Series


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

>>> from pandas import Series,DataFrame
>>> import pandas as pd
>>> obj=pd.Series([4,7,-5,3])
>>> obj
0    4
1    7
2   -5
3    3
dtype: 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'])
>>> obj1
a    4
b    7
d   -5
c    3
dtype: int64
通过索引取值:

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

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

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

>>> obj2.index.name='state'
>>> obj2.name='population'
>>> obj2
state       #索引名
Texas     710
Utah      500
ohio     3500
Name: 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  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002
结果会自动加上索引,且全部列被有序排列,注意是列被有序排列,即根据列名有序排列。

指定列的顺序

>>> DataFrame(data,columns=['year','state','pop'])
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9
如果传入的列找不到,则会产生NAN

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

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

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

>>> del frame2['pop']
>>> frame2
   year   state  debt  dept
0  2000    Ohio    12     0
1  2001    Ohio    12     1
2  2002    Ohio    12     2
3  2001  Nevada    12     3
4  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  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6
对结果进行 转置:
>>> frame3.T
        2000  2001  2002
Nevada   NaN   2.4   2.9
Ohio     1.5   1.7   3.6
设置index和columns的name属性:

>>> frame3.index.name='year'
>>> frame3.columns.name='state'
>>> frame3
state  Nevada  Ohio
year
2000      NaN   1.5
2001      2.4   1.7
2002      2.9   3.6

可以用于构造DataFrame的数据:

三、索引对象


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

>>> obj=Series(range(3),index=['a','b','c'])
>>> obj.index
Index([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 index
True

index的方法和属性:




参考:

《利用python进行数据分析》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值