热线电话:13121318867

登录
2020-06-03 阅读量: 2002
pandas选取数据df[],df.loc(),df.iloc()怎么区别?

1)行(列)选取(单维度选取):df[]。

这种情况一次只能选取行或者列,即一次选取中,只能为行或者列设置筛选条件(只能为一个维度设置筛选条件)。

2)区域选取(多维选取):df.loc[],df.iloc[]。

这种方式可以同时为多个维度设置筛选条件。

>>> df

name age gender isMarried

a Joe 25.0 1 yes

b Mike 32.0 0 yes

c Jack 18.0 1 no

d Rose NaN 1 yes

e David 15.0 0 no

f Marry 20.0 1 no

g Wansi 41.0 0 no

h Sidy NaN 0 yes

i Jason 37.0 1 no

j Even 32.0 0 no

行(列)选取:df[]

行(列)选取是在单一维度上进行数据的选取,即以行为单位进行选取或者以列为单位进行选取。Dataframe对象的行有索引(index),默认情况下是[0,1,2,……]的整数序列,也可以自定义添加另外的索引,例如上面的labels,(为区分默认索引和自定义的索引,在本文中将默认索引称为整数索引,自定义索引称为标签索引)。Dataframe对象的每一列都有列名,可以通过列名实现对列的选取。

1)选取行

选取行的方式包括三种:整数索引切片、标签索引切片和布尔数组。

a)整数索引切片:前闭后开

df[0:1]  #选取第一行
df[0:2] #选取前两行

b)标签索引切片:前闭后闭

df[:'a']  #选取第一行
df['a':'b'] #选取前两行

c)布尔数组

df[[True,True,True,False,False,False,False,False,False,False]]  #选取前三行,注意这里布尔序列的长度需要与列的长度相同
df[df['age']>30] #选取所有age大于30的行

2)列选取

列选取方式也有三种:标签索引、标签列表、Callable对象

a)标签索引:选取单个列

df['name']   #选取name列所有数据

b)标签列表:选取多个列

df[['name','age']]   #选取name和age两列数据

c)callable对象

df[lambda df: df.columns[0]]  #选取第一列

区域选取:df.loc[]、df.iloc[]

区域选取可以从多个维度(行和列)对数据进行筛选,可以通过df.loc[],df.iloc[]两种方法实现。采用df.loc[],df.iloc[]这三种方法进行数据选取时,方括号内必须有两个参数,第一个参数是对行的筛选条件,第二个参数是对列的筛选条件,两个参数用逗号隔开。df.loc[],df.iloc[]的区别如下:

df.loc[]只能使用标签索引,不能使用整数索引,通过便签索引切边进行筛选时,前闭后闭。

df.iloc[]只能使用整数索引,不能使用标签索引,通过整数索引切边进行筛选时,前闭后开。

df.loc[]

1)对行进行选取

df.loc['a', :]    #选取索引为‘a’的行
df.loc[['a','b','c'], :] #选取索引为‘a’或‘b’或‘c’的行
df.loc['a':'d', :] #选取从‘a’到‘d’的所有行(包括‘d’行)
df.loc[[True,True,True,False,False,False], :] #用布尔数组选取前3行
df.loc[df['age']>30,:] #选取所有age大于30的行
df.loc[lambda df:df['age'] > 30, :] #用callable对象选取age大于30的所有行

2)对列选取

df.loc[:, 'name']   #  输出所有人的姓名(选取name列)
df.loc[:, 'name':'age'] #输出所有人的姓名和年龄(选取name和age列)
df.loc[:, ['name','age','isMarried']] #输出所有人的姓名、年龄、婚否(选取name、age、isMarried列)
df.loc[:, [True,True,True,False]] #用布尔数组的方式选取前3列

3)同时对行和列进行筛选

df.loc[df['age']>30,['name','age']]       # 输出年龄大于30的人的姓名和年龄
df.loc[(df['name']=='Mike') |(df['name']=='Marry'),['name','age']] #输出行名为‘Mike’或‘Marry’的姓名和年龄

df.iloc[]

1)行选取

df.iloc[1, :]    #选取第2行
df.iloc[:3, :] #选取前3行
df.iloc[[1,3,5],:] #选取第2行、第4行、第6行
df.iloc[[True,True,True,False,False,False], :] #通过布尔数组选取前3行

2)列选取

df.iloc[:, 1]     #选取第2列
df.iloc[:, 0:3] #选取前3列
df.iloc[:, [0,2,3]] #选取第1列、第3列和第4列
df.iloc[:,[True,True,True,False]] #通过布尔数组选取前3列

3)同时选取行和列

df.iloc[1, [0,2,3]]   #选取第2行的第1列、第3列、第4列
df.iloc[:3, :3] #选取前3行的前3列
14.6116
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子