• Pandas组队学习: task3


    一、索引

    1.切片的用法

    用于取出两个索引的中间值,返回会包含切片的两个端点,如下所示:

    s = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'a', 'a', 'a', 'c'])
    s['b':'c']
    Out[133]: 
    b    2
    a    3
    a    4
    a    5
    c    6
    dtype: int64
    

    此时将端点b和c也一并进行了返回。因为所有的索引中具有唯一的'b'和'c',所以不会报错。

    若要对重复索引进行切片,例如a,则要先排序后再进行切片

    s.sort_index()['a': 'b']
    Out[14]: 
    a    1
    a    3
    a    4
    a    5
    b    2
    dtype: int64
    

    对整数索引切片时,取出的是位置的值,例如:

    s = pd.Series(['pig','pig','dog','cat'],index=(1,3,4,2))
    s
    Out[136]: 
    1    pig
    3    pig
    4    dog
    2    cat
    dtype: object
    
    s[3:4]
    Out[137]: 
    2    cat
    dtype: object
    

    取出来的是第四个元素,但对某一行索引时,还是和之前一样:

    s[3]
    Out[139]: 'pig'
    

    2.loc和iloc

    loc有两个输入,第一个输入为行,第二个输入为列。对于整数索引,直接切片时,结果如下:

    df
    Out[148]: 
                              School      Grade            Name
    5  Shanghai Jiao Tong University   Freshman    Gaopeng Yang
    4              Peking University   Freshman  Changqiang You
    3  Shanghai Jiao Tong University     Senior         Mei Sun
    2               Fudan University  Sophomore    Xiaojuan Sun
    1               Fudan University  Sophomore     Gaojuan You
    
    df[5:3]
    Out[149]: 
    Empty DataFrame
    Columns: [School, Grade, Name]
    Index: []
    

    得出的结论和之前相同,不使用任何函数,直接切片时是按位置进行切片的,但使用loc切片时,结果如下:

    df.loc[5:3]
    Out[150]: 
                              School     Grade            Name
    5  Shanghai Jiao Tong University  Freshman    Gaopeng Yang
    4              Peking University  Freshman  Changqiang You
    3  Shanghai Jiao Tong University    Senior         Mei Sun
    

    说明使用loc切片时,是对索引值进行切片,且切片包含端点。

    iloc与loc基本一致,但是是针对位置进行索引。

    用ilco对整数索引进行切片:

    df.iloc[5:3]
    Out[151]: 
    Empty DataFrame
    Columns: [School, Grade, Name]
    Index: []
    
    df.iloc[3:5]
    Out[152]: 
                 School      Grade          Name
    2  Fudan University  Sophomore  Xiaojuan Sun
    1  Fudan University  Sophomore   Gaojuan You
    

    由此可知切片是对位置进行切片,且不包含结束的端点

    在使用布尔列表的时候要特别注意,不能传入 Series 而必须传入序列的 values ,如下:

    df.iloc[(df.School=='Fudan University').values]
    Out[155]: 
                 School      Grade          Name
    2  Fudan University  Sophomore  Xiaojuan Sun
    1  Fudan University  Sophomore   Gaojuan You
    

    使用loc可以直接传入Series:

    df.loc[(df.School=='Fudan University')]
    Out[157]: 
                 School      Grade          Name
    2  Fudan University  Sophomore  Xiaojuan Sun
    1  Fudan University  Sophomore   Gaojuan You
    

    且loc加不加values均可:

    df.loc[(df.School=='Fudan University').values]
    Out[156]: 
                 School      Grade          Name
    2  Fudan University  Sophomore  Xiaojuan Sun
    1  Fudan University  Sophomore   Gaojuan You
    

    总结一下iloc和loc的区别:

    • 使用loc切片时,是对索引值进行切片,且切片包含两个端点。iloc切片是对位置进行切片,且不包含结束的端点

    • 在使用布尔列表的时,iloc不能传入 Series 而必须传入序列的 values ,loc传入两者均可

    3.随机抽样

    • 抽样函数resample,主要参数为replace,表示有无放回;weights,表示每个样本抽样的概率 , 例如:
    df_sample
    Out[159]: 
      id  value
    0  a      1
    1  b      2
    2  c      3
    3  d      4
    4  e      5
    

    有放回的均匀抽样可以写作:

    df_sample.sample(3,replace =True,weights=np.ones(5))	#weights相同即可代表均匀抽样
    

    二、多级索引

    多级索引顾名思义,就是列和行不再是单一的一个属性,而是多个属性。进行索引时使用元组索引

    切片

    先构造多级索引

    df.set_index(['School','Grade'])
    Out[170]: 
                                                       Name
    School                        Grade                    
    Shanghai Jiao Tong University Freshman     Gaopeng Yang
    Peking University             Freshman   Changqiang You
    Shanghai Jiao Tong University Senior            Mei Sun
    Fudan University              Sophomore    Xiaojuan Sun
                                  Sophomore     Gaojuan You
    

    切片时,无论元组在索引中是否重复出现,都必须经过排序才能使用切片,例如:

    df.loc[('Shanghai Jiao Tong University'):]
    UnsortedIndexError: 'Key length (1) was greater than MultiIndex lexsort depth (0)'
    

    排序后:

    df_sorted = df.sort_index()
    df_sorted.loc[('Shanghai Jiao Tong University'):]
    Out[194]: 
                                                    Name
    School                        Grade                 
    Shanghai Jiao Tong University Freshman  Gaopeng Yang
                                  Senior         Mei Sun
    

    三、索引的操作与运算

    1.交换和删除

    • swaplevel(0,2,axis=1) :只能交换两个,表示交换列索引的第三个和第一个
    • recorder_levels([2,1,0],axis=0) :可以交换任意个,表示交换行索引的第一个和第三个
    • dropleve([0,1],axis=1) :表示删除第一和第二列

    2.索引属性的修改

    • renam_axis :对索引层的名字修改
    • rename :对索引的值修改

    3.索引设置和重置

    • set_index :设置索引
    • reset_index : 进行重置

    4.索引的变形

    • reindex:用来扩展表格
    • reindex_like:其功能是仿照传入的表的索引来进行被调用表索引的变形
  • 相关阅读:
    OTG线与普通USB线的区别
    打开CMDLINE中的 ” earlyprink “ 参数
    深化管理、提升IT的数据平台建设方案
    ROS(indigo)ROSPlan框架
    ROS(indigo)RRT路径规划
    Unity UGUI图文混排(六) -- 超链接
    ROSCon 2016视频和幻灯片发布 ROS机器人操作系统重要参考资料
    Ubuntu和ROS一起愉快玩耍
    IO流—字符流
    IO流——字节流
  • 原文地址:https://www.cnblogs.com/zwrAI/p/14176045.html
Copyright © 2020-2023  润新知