Pandas入门(上)

Pandas入门(上)

Martin

pandas数据结构介绍

要使用pandas首先得熟悉它的两个数据结构:SeriesDataFrame

  • Series

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

>>> obj = Series([4,7,-5,3])
>>> obj
0    4
1    7
2   -5
3    3
dtype: int64

Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引,于是会自动创建一个0到N-1(N为数据长度)的整数型索引。你可以通过Series的valuesindex属性获取其数组形式和索引对象:

>>> obj.values
array([ 4,  7, -5,  3])
>>> obj.index
RangeIndex(start=0, stop=4, step=1)     # 开始索引下标为0,结束为4,步长为1

但是一般情况下,我们希望创建一个可以各个数据点进行标记的索引:

>>> obj2 = Series([4,7,-5,3],index=['d','b','a','c'])
>>> obj2
d    4
b    7
a   -5
c    3
dtype: int64

与普通数组相比,你可以通过索引的方式选取Series中的单个或一组值:

>>> obj2['a']
-5
>>> obj2['b']
7
>>> obj2[['b','a','d']]
b    7
a   -5
d    4
dtype: int64

如果数据被存放在一个python字典中,也可以直接通过这个字典来创建Series,并且如果只传入一个字典,则结果Series中的索引就是原字典的键(有序字典排序)。

>>> sdata = {
  'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
>>> obj3 = Series(sdata)
>>> obj3
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64

再来下面这个例子:

>>> sdata = {
  'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
>>> states = ['California','Ohio','Oregon','Texas']
>>> obj4 = Series(sdata,index=states)
>>> obj4
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

在这个例子中,sdata中跟states索引相匹配的那3个值会被找出来并放到相应位置上,但由于California所对应的sdata值找不到,所以结果就是NaN(即“非数字”not a number),在pandas中它用于表示缺失或NA值,以后将会使用NA表示数据缺失。pandas的isnullnotnull函数可用于检测缺失数据:

>>> pd.isnull(obj4)     # 顶层函数调用
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

>>> obj4.isnull()       # 实例方法调用
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

>>> pd.notnull(obj4)
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

Series最重要的一个功能就是:在算数运算中能自动对齐不同索引的数据。

>>> obj3
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64

>>> obj4
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

>>> obj3+obj4
California         NaN      # obj3中没有此项,自动变为NA值
Ohio           70000.0      
Oregon         32000.0      # 自动对齐数据并运算
Texas         142000.0
Utah               NaN      # obj4中没有此项,自动变为NA值
dtype: float64

Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:

>>> obj4.name = 'population'
>>> obj4.index.name = 'state'
>>> obj4
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

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

>>> obj.index = ['Bob','Steve','Jeff','Ryan']
>>> obj
Bob      4
Steve    7
Jeff    -5
Ryan     3
dtype: int64
  • DataFrame

DataFrame是一个表格型的数据结构。它含有一组有序的的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看成是有Series组成的字典(共用一个索引)。

构建DataFrame的办法有很多,常用的有两种方式:

  1. 一种是直接传入一个由等长列表或Numpy数组构成的字典
  2. 另一种是嵌套字典(也就是字典的字典)

下面来看一下第一种常用方式:

>>> 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结果会自动加上索引(跟Series一样),且全部列会被有序排列。

如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列,指定列顺序用参数columns完成:

>>> 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

Series一样,如果传入的列在数据中找不到,就会产生NA值:

>>> frame2 = DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])
>>> frame2
       year   state  pop debt       # debt列在data数据中找不到,故标记为NA
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

通过类似字典获取value的方式,对DataFrame也可以使用,返回为一个Series对象:

>>> frame2['year']      # 选取列数据
one      2000
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64

>>> frame2.year         # 这种方式跟上面的效果一样
one      2000
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64

注意:返回的Series拥有原DataFrame相同的索引,且其name属性已经被设置好。但是这种获取方式仅适用于列,对于行也就是axis=0来说,就要用相应的特殊方法.ix

>>> frame2.ix['three']      # 获取`three`行的数据
year     2002
state    Ohio
pop       3.6
debt      NaN
Name: three, dtype: object

列可以通过赋值方式进行修改,例如,可以给那个空列debt赋值:

>>> frame2['debt'] = 1
>>> frame2
       year   state  pop  debt
one    2000    Ohio  1.5     1
two    2001    Ohio  1.7     1
three  2002    Ohio  3.6     1
four   2001  Nevada  2.4     1
five   2002  Neva
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值