pandas中数据子集的获取
目录
- 前言
- 实战
前言
通常,在pandas模块中实现数据框子集的获取可以使用iloc、loc和ix三种方法,这三种方法既可以对数据行进行筛选,也可以实现变量的筛选,它们的语法可以表示成[rows_select,cols_select]。
iloc只能通过行号和列号进行数据的筛选,可以将iloc中的i理解为’integer’,即只能向[rows_select,cols_select]指定整数列表
该索引方式与数组的索引方式类似,都是从0开始,可以间隔取号,对于切片仍然无法取到上限。
loc 要比iloc灵活一些,可以将loc中的l理解成’label’,即可以向 [rows_select,cols_select]指定具体的行标签(行名称)和列标签(字段名)。注意这里的标签不再是索引。而且还可以将row_select指定为具体的筛选条件,在iloc中是无法做到的。
-----ix是iloc和loc的混合,可以将ix理解成mix,该方法吸收了iloc和loc的优点,使数据框子集的获取更加灵活。(高版本pandas已没有该函数)
实战
import pandas as pd
df1=pd.DataFrame({'name':['张三','李四','王五','赵六','孙七'],'gender':['男','女','女','女','男'],'age':[23,26,22,25,27]
},columns=['name','gender','age'])
###取出数据集中间三行(即所有女性),并且返回姓名和年龄两列
print(df1.iloc[1:4,[0,2]])
print(df1.loc[1:3,['name','age']])
###df1.ix[1:3,[0,2]]###假如数据集没有行号,而是具体的行名称,又该如何呢?
df2=df1.set_index('name')
##取出数据集的中间三行
print(df2.iloc[1:4,:])
print(df2.loc[['李四','王五','赵六'],:])
###df2.ix[1:4,:]#使用筛选条件,取出所有男性的姓名和年龄print(df1.loc[df1.gender=='男',['name','age']])
###df1.ix[df1.gender=='男',['name','age']]
结果如下:
name age
1 李四 26
2 王五 22
3 赵六 25
name age
1 李四 26
2 王五 22
3 赵六 25
gender age
name
李四 女 26
王五 女 22
赵六 女 25
gender age
name
李四 女 26
王五 女 22
赵六 女 25
name age
0 张三 23
4 孙七 27