python中iloc切片_Pandas中loc,iloc与直接切片的区别

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

4999元包邮

去购买 >

最近使用pandas,一直搞不清楚其中几种切片方法的区别,今天专门看了一下。

0. 把Series的行index或Dataframe的列名直接当做属性来索引。

如:

s.index_name

df.column_name

但是这种方法索引的名字可能会与自带的方法冲突,比如min,max等等,所以可能会失效。另外,在新版本中,这种索引方法不能作为左值。

1. df[]直接索引

直接索引索引的是列,方口号里面的内容一般是列索引名。也可以接受一个列名组成的list来接受多个列名。

df['A']

df[['A', 'B']]

如果要交换两列,直接用这样的方法是不对的:

df.loc[:,['B', 'A']] = df[['A', 'B']]

这是因为pandas默认在赋值的时候回匹配列名,这里面的AB和BA实际上没有区别。如果想要交换两列的话,应该使用AB两列的值作为右值,这样就不带列索引名了。

df.loc[:,['B', 'A']] = df[['A', 'B']].values

索引slice对象,索引的是行,因为这样做更加符合常理

df=pd.DataFrame(np.arange(16).reshape((4,4)),index=list(range(4)),columns=['a','b','c','d'])

df

Out[4]:

a b c d

0 01 2 3

1 4 5 6 7

2 8 9 10 11

3 12 13 14 15

df[0:1]

Out[6]:

a b c d

0 01 2 3

这里如果是Series,就可以使用单独的数字来索引;如果是Dataframe,就不可以,需要使用Python的slice对象形式的来索引。

2. loc,基于label的索引

由于pandas处理的是具有标签的表格对象,所以设计一套基于标签的索引方法是必要的,这就是loc

loc索引要注意的是:

loc是基于标签的,如果给出的索引中包含没有的标签,会报错

loc索引的开闭区间机制和Python传统的不同,而是与MATLAB类似的双侧闭区间,即只要出现,就会包含该标签

数字也可以放入loc中当做索引,但是这时数字指的是标签而不是 位置

df.loc[0:3,'a':'c']

Out[9]:

a b c

0 01 2

1 4 5 6

2 8 9 10

3 12 13 14

注意上面的0:3实际上并不是数字,而是行的label。

loc也可以接受布尔索引来取出其中的一些行

df.loc[df.loc[:,'a']>1]

3. iloc,完全基于位置的索引

iloc的用法完全和numpy中的数字索引一样,开闭区间的逻辑也和Python是相同的。

要注意的是,如果iloc方括号中直接给定一个数字或者一个slice的话,默认索引的是行。其中数字的情况会返回一个Series

df.loc[:,df.loc[1]>1]

Out[21]:

a b c d

0 01 2 3

1 4 5 6 7

2 8 9 10 11

3 12 13 14 15df.loc[:,df.loc[1]>4]

Out[22]:

b c d

01 2 3

1 5 6 7

2 9 10 11

3 13 14 15df.iloc[1]

Out[23]:

a4b5c6d7Name:1, dtype: int32

type(df.iloc[1])

Out[24]: pandas.core.series.Series

原文链接:https://www.cnblogs.com/daozhongshu/p/8973439.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值