Pandas loc和iloc用法区别

示例来源kaggle教程

pandas总共有两种索引方式:

  • index-based selection:根据位置(numerical position)选择,使用iloc
  • label-based selection:根据标签(index value)选择,使用loc

简单点说就是

  • 直接用第几行、第几列来找,用iloc
  • 直接用行名、列名来找,用loc

两种方式都后接[row]或[row,col],其中row,col可以是单值/区间/list
通常的情况是行为数字,列有列名

#都能得到第一行数据
reviews.iloc[0] 
reviews.loc[0] 
#得到第一列数据
reviews.iloc[:,0]
#得到前三行,第一列的数据
reviews.iloc[:3,0]
#得到行索引为1,3,5的第一列的数据
reviews.iloc[[1,3,5],0]

列索引一般都有列名,选择loc可以对string类型的索引名进行选择

#得到第一行,列名为‘country’的数据
reviews.loc[0,'country']
#得到列名为'taseter_name','points'的数据
reviews.loc[:,['taseter_name','points']]

行索引(index)为string类型时也同理:

#可以得到行索引字母表顺序在‘apple’,‘potatoes’之间的所有行
df.loc['Apples':'Potatoes']

需要注意的是:

  • iloc使用的是python内置的index,区间选择时前闭后开,
    [0:10]选择的是 0,1,···9 共10行内容
  • loc在区间选择时全闭
    [0:10]选择的是 0,1,2···10 共11行内容

条件筛选

#以下四种写法等价,之后的例子只挑一种写
reviews[reviews.country=='Italy']
reviews[reviews['country']=='Italy']
reviews.loc[reviews.country=='Italy']
reviews.loc[reviews['country']=='Italy']

#中间的小括号一定要加
reviews.loc[(reviews.country=='Italy')&(reviews.points >=90)]
reviews.loc[(reviews.country=='Italy')|(reviews.points >=90)]

reviews.loc[reviews.country.isin(['Italy','France'])]
reviews.loc[reviews.price.notnull()]

你可能感兴趣的:(Pandas loc和iloc用法区别)