• pandas 数据切片方法


    pandas 数据切片方法

    pandas 数据切片方法 :[],loc,iloc,at,iat,ix

    基础数据

    import pandas as pd
    import random
    random.seed(0)
    rnd_1 = [random.randrange(1,20) for x in range(10)]
    rnd_2 = [random.randrange(1,20) for x in range(10)]
    rnd_3 = [random.randrange(1,20) for x in range(10)]
    fecha = pd.date_range('2012-4-10', '2012-4-19')
    data = pd.DataFrame({'fecha':fecha, 'rnd_1': rnd_1, 'rnd_2': rnd_2, 'rnd_3': rnd_3})
    print(data)
    print(data.describe())
    

    结果:

           fecha  rnd_1  rnd_2  rnd_3
    0 2012-04-10     13     19     10
    1 2012-04-11     14      7      4
    2 2012-04-12      2     17      3
    3 2012-04-13      9      5     11
    4 2012-04-14     17     10     16
    5 2012-04-15     16      5     18
    6 2012-04-16     13      4      4
    7 2012-04-17     10      9     12
    8 2012-04-18     16     18     14
    9 2012-04-19     12      5     11
               rnd_1      rnd_2      rnd_3
    count  10.000000  10.000000  10.000000
    mean   12.200000   9.900000  10.300000
    std     4.417138   5.915141   5.186521
    min     2.000000   4.000000   3.000000
    25%    10.500000   5.000000   5.500000
    50%    13.000000   8.000000  11.000000
    75%    15.500000  15.250000  13.500000
    max    17.000000  19.000000  18.000000
    

    []切片方法
    按照索引实现行选择或列选择或区块选择

    print(data[1:5])   # 行选择
    
           fecha  rnd_1  rnd_2  rnd_3
    1 2012-04-11     14      7      4
    2 2012-04-12      2     17      3
    3 2012-04-13      9      5     11
    4 2012-04-14     17     10     16
    
    print(data[['rnd_1', 'rnd_2']])   # 列选择
    
       rnd_1  rnd_2
    0     13     19
    1     14      7
    2      2     17
    3      9      5
    4     17     10
    5     16      5
    6     13      4
    7     10      9
    8     16     18
    9     12      5
    
    # 区块选择, 对于多列选择,不能像行选择时一样使用1:5这样的方法来选择
    print(data[:5][['rnd_1', 'rnd_2']]) 
    
       rnd_1  rnd_2
    0     13     19
    1     14      7
    2      2     17
    3      9      5
    4     17     10
    

    loc
    loc可以按照索引来进行行列选择,包含结尾

    # 按照索引行选择, loc与第一种方法不同之处在于会把第5行也选择进去,而第一种方法只会选择到第4行为止。
    print(data.loc[1:5])
    
           fecha  rnd_1  rnd_2  rnd_3
    1 2012-04-11     14      7      4
    2 2012-04-12      2     17      3
    3 2012-04-13      9      5     11
    4 2012-04-14     17     10     16
    5 2012-04-15     16      5     18
    
    # 区块选择
    print(data.loc[2:4, ['rnd_2', 'fecha']])
    
       rnd_2      fecha
    2     17 2012-04-12
    3      5 2012-04-13
    4     10 2012-04-14
    

    loc能够选择在两个特定日期之间的数据,这两个日期必须都要在索引中

    # 将行索引设定为日期
    data_fecha = data.set_index('fecha')
    print(data_fecha.head())
    
                rnd_1  rnd_2  rnd_3
    fecha                          
    2012-04-10     13     19     10
    2012-04-11     14      7      4
    2012-04-12      2     17      3
    2012-04-13      9      5     11
    2012-04-14     17     10     16
    
    # 生成两个特定日期
    from pandas import datetime
    fecha_1 = datetime(2012, 4, 14)
    fecha_2 = datetime(2012, 4, 18)
    
     # 生成切片数据
    print(data_fecha.loc[fecha_1: fecha_2])
    
                rnd_1  rnd_2  rnd_3
    fecha
    2012-04-14     17     10     16
    2012-04-15     16      5     18
    2012-04-16     13      4      4
    2012-04-17     10      9     12
    2012-04-18     16     18     14
    

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

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

    # 行选择
    print(data_fecha.iloc[1: 5, :])
    
                rnd_1  rnd_2  rnd_3
    fecha
    2012-04-11     14      7      4
    2012-04-12      2     17      3
    2012-04-13      9      5     11
    2012-04-14     17     10     16
    
    # 列选择
    print(data_fecha.iloc[:,[1,2]].head())
    
                rnd_2  rnd_3
    fecha
    2012-04-10     19     10
    2012-04-11      7      4
    2012-04-12     17      3
    2012-04-13      5     11
    2012-04-14     10     16
    
    # 切片选择
    print( data_fecha.iloc[[1,3,6],[0,2]])
    
                rnd_1  rnd_3
    fecha
    2012-04-11     14      4
    2012-04-13      9     11
    2012-04-16     13      4
    

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

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

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

    选取或者删除某列含有特殊数值的行

    import pandas as pd
    import numpy as np
     
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    df1=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC'))
    print(df1)
    df2=df1.copy()
     
    #选取某列含有特定数值的行
    # 选取df1中A列包含数字1的行
    df1=df1[df1['A'].isin([1])]
    #通过~取反,选取不包含数字1的行
    df2=df2[~df2['A'].isin([1])]
    print(df1)
    print(df2)
    

    结果:

          A  B  C
    row0  1  2  3
    row1  4  5  6
    row2  7  8  9
    
          A  B  C
    row0  1  2  3
    
          A  B  C
    row1  4  5  6
    row2  7  8  9
    

    选取或者删除某行含有特殊值的列

    import pandas as pd
    import numpy as np
    
    a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    df2 = pd.DataFrame(a, index=['row0', 'row1', 'row2'], columns=list('ABC'))
    print(df2)
    #选取某行含有特定数值的列
    cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]==3]
    #利用enumerate对row0进行遍历,将含有数字3的列放入cols中
    print(cols)
     
    #df2=df2[cols]   选取含有特定数值的列
    df2=df2.drop(cols,axis=1) #利用drop方法将含有特定数值的列删除
    print(df2)
    

    结果:

    A  B  C
    row0  1  2  3
    row1  4  5  6
    row2  7  8  9
    ['C']
          A  B
    row0  1  2
    row1  4  5
    row2  7  8
    

    pandas 读csv

    pd.read_csv(res_csv_path, encoding="utf-8-sig", sep=",", quotechar="'")
    

    参考:
    https://www.cnblogs.com/traditional/p/12514914.html
    https://cloud.tencent.com/developer/article/1856554

  • 相关阅读:
    黑马程序员_字符串常用处理方法
    动软代码生成器,主子表增加的时候子表的parentID无法插入问题解决方案
    大数据量高并发的数据库优化详解
    C# Socket网络编程精华篇 (转)
    html+javascript+soap获取webservice免费天气预报信息
    js中字符串怎么转化为日期
    attachEvent方法的作用
    C#中[WebMethod]的用法,aspx、ashx、asmx
    C#操作XML方法详解
    C#操作XML的通用方法总结
  • 原文地址:https://www.cnblogs.com/michaelcjl/p/16623630.html
Copyright © 2020-2023  润新知