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

最近使用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   0   1   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  0  1  2  3

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

2. loc,基于label的索引

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

猜你喜欢

转载自www.cnblogs.com/daozhongshu/p/8973439.html