• 利用pandas进行数据分析之二:DataFrame与Series数据结构对比


    Series与DataFrame对比学习


    文章为本人原创,未经同意请勿转载,http://www.cnblogs.com/smallcrystal/ 

    Series:构建的方法,一组数组(列表或元组),利用Series(),自动生成索引。或Series(字典),值只有一列,无列索引,只有行索引

    属性: .index、.values   .name   .index.name   .values.name

    >> data={'state':['ohio','ohio','ohio','nev','nev'],'year':[2000,2001,2002,2003,2004],'pop':[1.5,1.3,1.7,2.0,3.5]}

    >>> pd.Series(data)

    pop           [1.5, 1.3, 1.7, 2.0, 3.5]

    state      [ohio, ohio, ohio, nev, nev]

    year     [2000, 2001, 2002, 2003, 2004]

    dtype: object

    DataFrame:构建方法:直接传入一个由等长列表或Numpy数组组成的字典,利用DataFrame(),值有多列,并有列索引

    1、由数组、列表或元组组成的字典:,每个序列变成DataFrame的一列,所有序列的长度必须相同

    >>> data={'state':['ohio','ohio','ohio','nev','nev'],'year':[2000,2001,2002,2003,2004],'pop':[1.5,1.3,1.7,2.0,3.5]}

    >>> pd.DataFrame(data)

       pop state  year

    0  1.5  ohio  2000

    1  1.3  ohio  2001

    2  1.7  ohio  2002

    3  2.0   nev  2003

    4  3.5   nev  2004

    2、二维ndarray,可以传入行标和列标

    >>> ARR=np.array([[1,2,3,4],[5,6,7,8]])

    >>> ff=pd.DataFrame(ARR,columns=list('abcd'),index=['first','second'])

    >>> ff

            a  b  c  d

    first   1  2  3  4

    second  5  6  7  8

    arr=pd.DataFrame(np.arange(12).reshape(4,3),index=[],columns)  #利用np.arange(12).reshape(n,m)生成二维ndarray

    3、由字典组成的字典:各内层字典会成为一列,键会被合并成结果的行索引

    4、由Series组成的字典,每个Series会成为一列,如果没有显示指定索引,则各Series的索引会被合并成结果的行索引

     


     

    DataFrame:是一个表格型的数据结构,包含一组有序的列,每列可以是不同的值类型,既有行索引,又有列索引。

    属性有DataFrame:.columns、 .index、.values

    >>> pd.DataFrame(data,columns=['pop','year','state'])#指定列,则DataFrame的列就会按照指定顺序进行排列,和Series指定索引一样;

       pop  year state

    0  1.5  2000  ohio

    1  1.3  2001  ohio

    2  1.7  2002  ohio

    3  2.0  2003   nev

    4  3.5  2004   nev

     

    >>> pd.Series(data,index=['pop','year','state'])

    pop           [1.5, 1.3, 1.7, 2.0, 3.5]

    year     [2000, 2001, 2002, 2003, 2004]

    state      [ohio, ohio, ohio, nev, nev]

     

    >>> pd.DataFrame(data,columns=['pop','other','state','add'])#如果传入的列正在数据中找不到,就会产生NA,和Series一样

       pop other state  add

    0  1.5   NaN  ohio  NaN

    1  1.3   NaN  ohio  NaN

    2  1.7   NaN  ohio  NaN

    3  2.0   NaN   nev  NaN

    4  3.5   NaN   nev  NaN

    >>> pd.Series(data,index=['pop','year','state','ADD'])

    pop           [1.5, 1.3, 1.7, 2.0, 3.5]

    year     [2000, 2001, 2002, 2003, 2004]

    state      [ohio, ohio, ohio, nev, nev]

    ADD                                 NaN

    >>> pd.DataFrame(data,index=list('abcde'))#更改索引

       pop state  year

    a  1.5  ohio  2000

    b  1.3  ohio  2001

    c  1.7  ohio  2002

    d  2.0   nev  2003

    e  3.5   nev  2004


     属性

    >>> f=pd.DataFrame(data,index=list('abcde'))

    >>> f.index ###pandas的索引对象负责管理周标签和其他元数据(比如轴名称),index对象是不可修改的。

    Index([u'a', u'b', u'c', u'd', u'e'], dtype='object')

    >>> f.columns

    Index([u'pop', u'state', u'year'], dtype='object')

    >>> f.values#以二维ndarray的形式返回数据

    array([[1.5, 'ohio', 2000],

           [1.3, 'ohio', 2001],

           [1.7, 'ohio', 2002],

           [2.0, 'nev', 2003],

           [3.5, 'nev', 2004]], dtype=object)

    >>> s=pd.Series(data,index=['pop','year','state','ADD'])

    >>> s.index

    Index([u'pop', u'year', u'state', u'ADD'], dtype='object')

    >>> s.values

    array([[1.5, 1.3, 1.7, 2.0, 3.5], [2000, 2001, 2002, 2003, 2004],

           ['ohio', 'ohio', 'ohio', 'nev', 'nev'], nan], dtype=object)


     

    获取列:通过类似字典标记的方式或属性的方式,将DataFrame的获取为一个Series,返回的Series拥有原DataFrame相同的索引

    >>> f['pop']#指定列,

    a    1.5

    b    1.3

    c    1.7

    d    2.0

    e    3.5

    >>> f.year#利用属性获取

    a    2000

    b    2001

    c    2002

    d    2003

    e    2004

    >>> s.year

    [2000, 2001, 2002, 2003, 2004]

    >>> s['year']

    [2000, 2001, 2002, 2003, 2004]

    >>> s[1]

    [2000, 2001, 2002, 2003, 2004]

    获取:行可以通过位置或名称的方式进行索引,比如用索引字段ix

    >>> f.ix['a']

    pop       1.5

    state    ohio

    year     2000

    Name: a, dtype: object

    #列可以通过赋值方式进行修改,或增加列,将列表或者数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配

    如果是Series,就会精确匹配DataFrame的索引,所有空位都将被填上缺失值

     

    >>> f['add']=[10,20,30,40,50]

    >>> f

       pop state  year  add

    a  1.5  ohio  2000   10

    b  1.3  ohio  2001   20

    c  1.7  ohio  2002   30

    d  2.0   nev  2003   40

    e  3.5   nev  2004   50

    >>> s['add']=(1,2,3,4,5)

    >>> s

    pop           [1.5, 1.3, 1.7, 2.0, 3.5]

    year     [2000, 2001, 2002, 2003, 2004]

    state      [ohio, ohio, ohio, nev, nev]

    ADD                                 NaN

    add                     (1, 2, 3, 4, 5)

    #删除列

    >>> del f['add']

     #转置

    >>> f.T

              a     b     c     d     e

    pop     1.5   1.3   1.7     2   3.5

    state  ohio  ohio  ohio   nev   nev

    year   2000  2001  2002  2003  2004

     

  • 相关阅读:
    MOSS 2010:安装和使用Office Web Apps
    MOSS 2010:Visual Studio 2010开发体验(29)——工作流开发最佳实践(三)
    VS 2010 : 如何开发和部署Outlook 2010插件(Addin)
    MOSS 2010:Visual Studio 2010开发体验(33)——工作流开发最佳实践(五):全局可重用工作流
    《实践与思考》一书的概述和随笔连载说明
    MOSS 2010:Visual Studio 2010开发体验(21)——使用Business Connectivity Service(BCS)集成业务系统
    用于 Web 应用程序项目部署的 Web.config 转换语法 【转载】
    《实践与思考》系列连载(2)—— 第一部分 我们走在.NET的实践征途上 序言
    MOSS 2010:Visual Studio 2010开发体验(16)——客户端对象模型
    “人在旅途”之随想以及旅游指南(travel.msra.cn)简介
  • 原文地址:https://www.cnblogs.com/smallcrystal/p/5809864.html
Copyright © 2020-2023  润新知