zoukankan      html  css  js  c++  java
  • pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)

    数据介绍

    先随机生成一组数据:

    import pandas as pd
    import numpy as np
    
    state = ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada']
    year = [2000, 2001, 2002, 2003, 2004]
    pop = [1.3, 1.4, 1.6, 4.5, 2.7]
    frame = pd.DataFrame({'state': state, 'year': year, 'pop': pop})
    print(frame)
    

     结果:

       pop   state  year
    0  1.3    Ohio  2000
    1  1.4    Ohio  2001
    2  1.6    Ohio  2002
    3  4.5  Nevada  2003
    4  2.7  Nevada  2004
    

    1. []切片方法

    # 行选择
    print(frame[1:3])
    
    # 列选择
    print(frame[['year', 'pop']])
    
    # 区块选择
    print(frame[:3][['state', 'year']])
    

     结果:

       pop state  year
    1  1.4  Ohio  2001
    2  1.6  Ohio  2002
    year pop 0 2000 1.3 1 2001 1.4 2 2002 1.6 3 2003 4.5 4 2004 2.7
    state year 0 Ohio 2000 1 Ohio 2001 2 Ohio 2002

    2.loc(按照索引来进行行列选择)

    # 行选择
    print(frame.loc[1:3])
    
    # 区块选择
    print(frame.loc[1:3, ['year', 'pop']])
    

     结果:

       pop   state  year
    1  1.4    Ohio  2001
    2  1.6    Ohio  2002
    3  4.5  Nevada  2003
    year pop 1 2001 1.4 2 2002 1.6 3 2003 4.5

     注意:loc与[]的不同之处在于会把3也选择进去,而使用[]是不包含的。

    In [15]: data_fecha.head()
    Out[15]: 
                rnd_1  rnd_2  rnd_3
    fecha                          
    2012-04-10      8     17     12
    2012-04-11      1     16      3
    2012-04-12      7      6      1
    2012-04-13      2     16      7
    2012-04-14      4     17      7
    
    In [16]: # 生成两个特定日期
        ...: fecha_1 = dt.datetime(2013, 4, 14)
        ...: fecha_2 = dt.datetime(2013, 4, 18)
        ...: 
        ...: # 生成切片数据
        ...: data_fecha.loc[fecha_1: fecha_2]
    Out[16]: 
                rnd_1  rnd_2  rnd_3
    fecha                          
    2013-04-14     17     10      5
    2013-04-15     14      4      9
    2013-04-16      1      2     18
    2013-04-17      9     15      1
    2013-04-18     16      7     17
    

     建议:使用loc而尽量少使用[],因为loc在对DataFrame进行重新赋值操作时会避免chained indexing问题,使用[]时编译器很可能会给出SettingWithCopy的警告。

    3.iloc

    如果说loc是按照索引(index)的值来选取的话,那么iloc就是按照索引的位置来进行选取。iloc不关心索引的具体值是多少,只关心位置是多少,所以使用iloc时方括号中只能使用数值。

    # 行选择
    print(frame.iloc[1:3])
    
    # 列选择
    print(frame.iloc[:, [1, 2]])
    
    # 区块选择
    print(frame.iloc[[1, 3, 4], [0, 2]])
    

     结果:

       pop state  year
    1  1.4  Ohio  2001
    2  1.6  Ohio  2002
    state year 0 Ohio 2000 1 Ohio 2001 2 Ohio 2002 3 Nevada 2003 4 Nevada 2004
    pop year 1 1.4 2001 3 4.5 2003 4 2.7 2004

    4.at

    at的使用方法与loc类似,但是比loc有更快的访问数据的速度,而且只能访问单个元素,不能访问多个元素。

    import time
    start = time.clock() frame.at[1,'year'] Out[8]: 2001 end = time.clock() end - start Out[11]: 30.75638200200791
    start = time.clock() frame.loc[1,'year'] Out[13]: 2001 end = time.clock() end - start Out[15]: 29.014473024534

    5.iat

    iat对于iloc的关系就像at对于loc的关系,是一种更快的基于索引位置的选择方法,同at一样只能访问单个元素。

    In [15]:frame.iat[1,2]
    Out[16]: 2001
    

    6.ix

    以上几种方法都要求查询的秩在索引中,或者位置不超过长度范围,而ix允许你得到不在DataFrame索引中的数据。

    In [28]: date_1 = dt.datetime(2013, 1, 10, 8, 30)
        ...: date_2 = dt.datetime(2013, 1, 13, 4, 20)
        ...: 
        ...: # 生成切片数据
        ...: data_fecha.ix[date_1: date_2]
    Out[28]: 
                rnd_1  rnd_2  rnd_3
    fecha                          
    2013-01-11     19     17     19
    2013-01-12     10      9     17
    2013-01-13     15      3     10
    

     2013年1月10号并没有被选择进去,因为这个时间点被看作为0点0分,比8点30分要早一些。

  • 相关阅读:
    clone对象
    Windows下swoole扩展的编译安装部署
    PHP备忘录
    Linux文档的压缩与打包
    Linux系统启动过程
    Linux虚拟机安装
    MongoDB自动增长
    MongoDB固定集合(Capped Collections)
    Activating Google Cloud Storage
    Downloading the Google Cloud Storage Client Library
  • 原文地址:https://www.cnblogs.com/mlan/p/8192256.html
Copyright © 2011-2022 走看看