zoukankan      html  css  js  c++  java
  • pandas 学习 第5篇:DataFrame

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的。可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟一个中括号:[row,col],中括号内 row表示行索引或行标签,col表示列索引或列标签。如果省略row, 那么row维度使用“:”代替,格式是 [ :, col] ,表示访问所有行的特定列;如果省略col ,格式是[row],表示访问特定行的所有列。

    有以下数据框对象df,其数据和索引如下:

           year   state  pop
    one    2000    Ohio  1.5
    two    2001    Ohio  1.7
    three  2002    Ohio  3.6
    four   2001  Nevada  2.4
    five   2002  Nevada  2.9

    一,索引单个cell

    通过元素的行和列索引对来访问单个cell,at 和 iat 属性只能访问当个cell,区别是at可以使用字符串和整数,而iat只能使用整数。

    at 和 iat 的格式是:[row, column], 第一个维度是行索引,第二个维度是列索引。

    通过iat属性(设置下标)来访问单个cell:

    >>> df.iat[1,2]
    1.7

    通过at属性(设置标签)来访问单个cell:

    >>> df.at['two','pop']
    1.7

    二,通过位置来访问多个元素

    loc 和 iloc 属性可以访问多个cell,区别是loc可以使用标签和布尔(掩码)数组,不能使用整数位置(整数代表元素的位置),而iloc只能使用整数位置。

    loc 和 iloc的格式是:

    • [row] 访问单行,包括所有列
    • [row, column]  访问有row 和 column 确定的元素

    .loc[] 主要基于标签,但也可以与布尔数组一起使用。在格式 .loc[row,col] 中,row和col允许的输入有:

    • label:单个标签,表示行标签,索引的数据是一行
    • [label]:标签数组,表示行标签数组,索引的数据是多行
    • ['a':'f'] 或 ['a':'f']:索引切片
    • [True, False, True]:和axis等长的布尔数组

     举个例子,分别使用iloc 和loc来访问数组的多个元素:

    >>> df.iloc[[0,1],[0,2]]
         year  pop
    one  2000  1.5
    two  2001  1.7
    >>> df.loc[['one','two'],['year','pop']]
         year  pop
    one  2000  1.5
    two  2001  1.7

    三,访问整列的数据

    直接通过列名来访问DataFrame的数据,选择特定列的所有数据行,有两种格式是:

    • df['col']    单列索引方式
    • df.col     属性方式
    • df[['col1','col2']]  列索引数组方式

    1,属性方式 和单列索引方式

    对于属性方式和单列索引方式,只能用于访问单列,返回的是Series对象:

    df['state']
    df.state

    属性方式是指:列名作为DataFrame对象的属性,通过 .  号引用列名来访问一列的值

    单列索引方式是指:列名作为DataFrame对象的索引,通过[] 号索引列来访问一列的值

    2,列索引数组方式

    对于列索引数组方式,一次访问多列,返回的对象是DataFrame类型

    df[['year','state']]

    3,对序列进行查询

    对于单列索引和属性方式,返回的结果是一个序列,因此,可以通过[idx]来访问序列中的元素,[]中的索引idx是行索引,也就是说,使用 .col[row] 或 [col][row] 来访问单个cell,举个列子:

    >>> df.year['one']
    2000
    >>> df['year']['one']
    2000

    四,索引数组

    索引数组是指DataFrame使用数组作为索引,索引数组可以是行标签、列标签,或者行索引、列索引,也可以是布尔(掩码)索引数组。

    1,列标签构成的索引数组

    数据框对象可以使用loc和列标签来访问数据,例如,省略row维度,选择state和pop列的所有数据行:

    >>> df.loc[:,['state','pop']]
            state  pop
    one      Ohio  1.5
    two      Ohio  1.7
    three    Ohio  3.6
    four   Nevada  2.4
    five   Nevada  2.9

    2,掩码索引数组

    掩码索引数组是由True和False构成的数组,在特定的轴(维度)上,维度的长度和掩码索引的长度相同,选择True对应的索引,忽略False对应的索引。

    举个例子,省略row维度的索引,由于该数据框由三列,可以把year和state列对应的掩码设置为True,把pop列对应的掩码设置为False。

    >>> df.columns
    Index(['year', 'state', 'pop'], dtype='object')
    >>> df.loc[:,[True,True,False]]
           year   state
    one    2000    Ohio
    two    2001    Ohio
    three  2002    Ohio
    four   2001  Nevada
    five   2002  Nevada

    序列具有矢量化操作的特性,当选择某一列时,可以通过逻辑运算得出掩码索引数组:

    >>> df['pop']>=2
    one      False
    two      False
    three     True
    four      True
    five      True
    Name: pop, dtype: bool
    >>> df.loc[df['pop']>=2]
           year   state  pop
    three  2002    Ohio  3.6
    four   2001  Nevada  2.4
    five   2002  Nevada  2.9

    五,遍历DataFrame

    使用iterrows() 遍历数据框,iterrows()返回值为元组(index,row) ,每次迭代返回一行数据:

    for index,row in df.iterrows():
        print(index,row)

    使用itertuples()遍历数据框,返回的是命名元组:

    DataFrame.itertuples(self, index=True, name='Pandas')

    使用items()或 iteritems()遍历数据框,返回值为元组(column,Series),每次迭代返回一列数据:

    >>> for col_name,col in df.items():
    ...     print(col_name,col)

    参考文档:

    pandas DataFrame

  • 相关阅读:
    1509 -- Glass Beads POJ
    1043: [HAOI2008]下落的圆盘
    面向对象的特性一:封装性
    java的值传递机制
    可变参数的形参方法
    方法的重载
    类及对象
    面向对象
    数组的常用算法问题
    数组的常见异常
  • 原文地址:https://www.cnblogs.com/ljhdo/p/11599177.html
Copyright © 2011-2022 走看看