示例来源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()]