有时数据读入后并不要求对整体数据进行分析,而是获取数据中的部分子集。例如,对于地铁乘客进行分析时,可能只关心某些时间段的流量;对于商品的交易可能只需要分析某些颜色的价格变动;对于医疗诊断可能只对某个年龄段的人群感兴趣等。所以,该如何根据特定的条件实现数据子集的获取呢?这里进行简要阐述。
pandas模块中,数据框子集的获取可以使用iloc、loc和ix三种“方法”,这三种方法既可以对数据进行筛选,也可以实现变量的挑选,他们的语法可以表示成[rows_select,cols_select]。
1. iloc
iloc只能通过行号和列号进行数据的筛选,读者可以将iloc中的“i”理解为“integer”,即只能向[rows_select,cols_select]指定整数列表。该索引方式与数组的索引方式类似,都是从0开始,可以间隔取号,对于切片仍然无法取到上限。
2. loc
loc要比iloc灵活一些,可以将loc的“l”理解为label,即可以向[rows_select,cols_select]指定具体的行标签(行名称)和列标签(字段名)。注意这里是标签不再是索引。而且,还可以将rows_select指定为具体的筛选条件,在iloc中是无法做到的。
3. ix
ix是iloc和loc的混合,读者可以将ix理解为“mix”,该“方法”吸收率iloc和loc的优点,使数据库子集的获取更为灵活。
4. 例子
df1 =pd.DataFrame({'name':['张三','李四','王二','丁一','李五'],'gender':['男','女','女','女','男'],'age':['23','22','25','20','19'],columns =['name','gender','age'])
df1
#取出数据集的中间三行(即所有女性),并且返回姓名和年龄两列
df1.iloc[1:4,[0,2]]
df1.loc[1:3,['name','age']]
df1.ix[1:3,[0,2]]