pandas.DataFrame索引之 loc与iloc用法

p a n d a s . D a t a F r a m e ( ) pandas.DataFrame() pandas.DataFrame() l o c loc loc i l o c iloc iloc用法

p a n d a s . D a t a F r a m e ( ) pandas.DataFrame() pandas.DataFrame()实际上是一个二维矩阵, l o c loc loc i l o c iloc iloc方法都是用于从 p a n d a s . D a t a F r a m e ( ) pandas.DataFrame() pandas.DataFrame()中选取一些行,一些列,或者具体的某个位置的值,也可以间接的来改变 D a t a F r a m e DataFrame DataFrame里面的满足条件的行,列,或具体位置的值, l o c loc loc i l o c iloc iloc的区别就在于 l o c loc loc S e l e c t i o n   b y   L a b e l Selection\ by\ Label Selection by Label (即通过标签索引),而 i l o c iloc iloc S e l e c t i o n   b y   P o s i t i o n Selection\ by\ Position Selection by Position (即通过 D a t a F r a m e DataFrame DataFrame的下标索引, D a t a F r a m e DataFrame DataFrame行列下标都是 0 , 1 , 2... 0,1,2... 0,1,2...)

  • 函数原型

    d f . l o c [ r o w _ i n d e x e r , c o l u m n _ i n d e x e r ] df.loc[row\_indexer,column\_indexer] df.loc[row_indexer,column_indexer] ( i l o c iloc iloc也一样)

    其中 r o w _ i n d e x e r row\_indexer row_indexer c o l u m n _ i n d e x e r column\_indexer column_indexer分别指行和列的索引方法,下文要讲的就是各种各样的索引方法,每种方法即可作为 r o w _ i n d e x e r row\_indexer row_indexer也可以作为 c o l u m n _ i n d e x e r column\_indexer column_indexer,所以可以自由组合(但是只能 l o c loc loc l o c loc loc的方法组合, i l o c iloc iloc i l o c iloc iloc的方法组合,不可交叉),在不指定 c o l u m n _ i n d e x e r column\_indexer column_indexer的情况下默认全部选,但是如果不指定 r o w _ i n d e x e r row\_indexer row_indexer的话需要这样写 D a t a F r a m e . l o c [ : , c o l u m n _ i n d e x e r ] DataFrame.loc[:,column\_indexer] DataFrame.loc[:,column_indexer]

  • p a n d a s . D a t a F r a m e . l o c pandas.DataFrame.loc pandas.DataFrame.loc

    l o c loc loc方法通过标签或者bool数组选取一些行和列,首先构造一个DataFrame,作为全文解析用的例子:

    import pandas as pd
    import numpy as np  #numpy后面要用到
    
    df=pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
        ,columns=['Chinease','Math','English','Politics']
        ,index=['Bob','Cindy','Alice','QWQ'])
    print(df)
    

    也就是这样的一个DataFrame:

    ChineaseMathEnglishPolitics
    Bob1234
    Cindy5678
    Alice9101112
    QWQ13141516

    l o c loc loc的几种使用方法如下所述:

    • 通过单个标签选取一行或者一列,如 ‘Alice’
      如选取Alice这一行:
      print(df.loc['Alice'])   #返回值类型为Series
      
      输出如图:
      在这里插入图片描述
      当然也可以选取一列:
      print(df.loc[:,'Math']) 
      
      输出如图:
      在这里插入图片描述
      对应的修改某一行或者某一列的所有值的操作为:
      df.loc['Bob']=10 #修改Bob这一行的所有值为10
      df.loc[:,'English']=0 #修改English这一列的所有值为0
      df.loc['Bob','English']=0 #修改Bob同学的English成绩为0
      
      剩下的方法对应的改值方法类似,故下面不再赘述
    • 通过标签的一个列表或者一个array来选取一些行
      如选取Bob和Alice这两行
      print(df.loc[['Bob','Alice']])  #返回值类型为DataFrame
      
      运行结果:
      在这里插入图片描述
      也可以通过使用numpy.array来索引:
      print(df.loc[np.array(['Bob','Alice'])])
      
      运行结果与上图一致
    • 通过标签的一个切片 ( s l i c e ) (slice) (slice)来选取一些连续的行,这里需要注意两点,第一这里是标签的切片,比如 ‘Bob’:‘Alice’ 这样,第二就是这里的切片有一点不同于python里的普通切片:这里的切片包含上界
      比如选取从Bob到Alice之间的所有行:
      print(df.loc['Bob':'Alice']) #返回值类型为DataFrame
      
      运行结果如图:
      在这里插入图片描述
    • 通过一个与轴等长的 b o o l bool bool数组选取一些行,这里的数组实际上可以是 l i s t list list或者 n u m p y . a r r a y numpy.array numpy.array或者是值类型为 b o o l bool bool S e r i e s Series Series
      比如选取 Bob, Alice, QWQ 这三行:
      print(df.loc[[False,False,True,True]])  #list
      print(df.loc[np.array([False,False,True,True])]) #numpy.array
      print(df.loc[df['English']>8]) #语句df['English']>8返回的就是一个只为布尔类型的Series
      
      三种写法效果相同:
      在这里插入图片描述
    • 上述四种方法可以两两组合来同时索引行和列
      例如:
      print(df.loc[df['English']>6,[True,False,True,True]]) #取English大于6的行与第0,2,3列的交集
      
      输出如下所示:
      在这里插入图片描述
  • p a n d a s . D a t a F r a m e . i l o c pandas.DataFrame.iloc pandas.DataFrame.iloc

    i l o c iloc iloc方法通过下标(即整数)访问一些行或者列,只是把 l o c loc loc方法中采用的标签索引改成下表访问了而已,方法与上述方法相同,故这里只给出一些例子,读者需要用的话可以自行运行测试

    • 通过一个整数下标访问:
      df.iloc[0] #返回df的第0行,返回值类型为Series
      
    • 通过一个包含整数的 l i s t list list访问:
      df.iloc[[0,2,3]] #返回df的第0,2,3行,返回值类型为DataFrame
      
    • 通过一个切片访问,注意这里的切片和不同的切片一样,即不包含上界
      df.iloc[1:3] #返回df的第1,2行,返回值类型为DataFrame
      
    • 通过一个与轴等长的布尔数组访问
      df.iloc[[True,False,True,True]] #返回df中第0,2,3行,返回值类型为DataFrame
      
    • 上述四种方式可以两两组合来同时索引行和列
      例如:
      print(df.iloc[0:3,[True,False,True,True]]) #选取第0,1,2行与0,2,3列的交集,返回值类型为DataFrame
      
  • 参考

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值