时间:2021-05-22
Pandas库十分强大,但是对于切片操作iloc, loc和ix,很多人对此十分迷惑,因此本篇博客利用例子来说明这3者之一的区别和联系,尤其是iloc和loc。
对于ix,由于其操作有些复杂,我在另外一篇博客专门详细介绍ix。
首先,介绍这三种方法的概述:
接下来,举几个例子说明:
1 loc
其实,对于loc始终坚持一个原则:loc是基于label进行索引的!
import pandas as pddf1 = pd.DataFrame(data= [[1, 2, 3],[4, 5, 6], [7, 8, 9]], index=[0, 1, 2], columns=['a','b','c'])df2 = pd.DataFrame(data= [[1, 2, 3],[4, 5, 6], [7, 8, 9]], index=['e', 'f', 'g'], columns=['a','b','c'])print(df1)print(df2)'''df1: a b c0 1 2 31 4 5 62 7 8 9df2: a b ce 1 2 3f 4 5 6g 7 8 9''' # loc索引行,label是整型数字print(df1.loc[0])'''a 1b 2c 3Name: 0, dtype: int64''' # loc索引行,label是字符型print(df2.loc['e'])'''a 1b 2c 3Name: 0, dtype: int64'''# 如果对df2这么写:df2.loc[0]会报错,因为loc索引的是label,显然在df2的行的名字中没有叫0的。print(df2.loc[0])'''TypeError: cannot do slice indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <class 'int'>''' # loc索引多行数据print(df1.loc[1:])''' a b c1 4 5 62 7 8 9''' # loc索引多列数据print(df1.loc[:,['a', 'b']])''' a b0 1 21 4 52 7 8'''# df1.loc[:,0:2]这么写报错, 因为loc索引的是label,显然在df1的列的名字中没有叫0,1和2的。print(df1.loc[:,0:2])'''TypeError: cannot do slice indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <class 'int'>''' # locs索引某些行某些列print(df1.loc[0:2, ['a', 'b']])''' a b0 1 21 4 52 7 8'''2 iloc
其实,对于iloc始终坚持一个原则:iloc是基于position进行索引的!
import pandas as pddf1 = pd.DataFrame(data= [[1, 2, 3],[4, 5, 6], [7, 8, 9]], index=[0, 1, 2], columns=['a','b','c'])df2 = pd.DataFrame(data= [[1, 2, 3],[4, 5, 6], [7, 8, 9]], index=['e', 'f', 'g'], columns=['a','b','c'])print(df1)print(df2)'''df1: a b c0 1 2 31 4 5 62 7 8 9df2: a b ce 1 2 3f 4 5 6g 7 8 9'''# iloc索引行,label是整型数字print(df1.iloc[0])'''a 1b 2c 3Name: 0, dtype: int64''' # iloc索引行,label是字符型。如果按照loc的写法来写应该是:df2.iloc['e'],显然这样报错,因为iloc不认识label,它是基于位置的。print(df2.iloc['e'])'''TypeError: cannot do positional indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [e] of <class 'str'>'''# iloc索引行,label是字符型。正确的写法应该如下:# 也就说,不论index是什么类型的,iloc只能写位置,也就是整型数字。print(df2.iloc[0])'''a 1b 2c 3Name: e, dtype: int64''' # iloc索引多行数据print(df1.iloc[1:])''' a b c1 4 5 62 7 8 9''' # iloc索引多列数据# 如果如下写法,报错。print(df1.iloc[:,['a', 'b']])'''TypeError: cannot perform reduce with flexible type'''# iloc索引多列数据, 正确写法如下:print(df1.iloc[:,0:2])''' a b0 1 21 4 52 7 8''' # iloc索引某些行某些列print(df1.iloc[0:2, 0:1])''' a0 11 4'''3 ix
ix的操作比较复杂,在pandas版本0.20.0及其以后版本中,ix已经不被推荐使用,建议采用iloc和loc实现ix。
如有对ix的使用比较感兴趣的朋友可以参考这篇博客。
到此这篇关于详解pandas中iloc, loc和ix的区别和联系的文章就介绍到这了,更多相关pandas iloc loc ix内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Pandas库中有iloc和loc以及ix可以用来索引数据,抽取数据。但是方法一多也容易造成混淆。下面将一一来结合代码说清其中的区别。1.iloc和loc的区别
loc和iloc的意思首先,loc是location的意思,和iloc中i的意思是指integer,所以它只接受整数作为参数,详情见下面。loc和iloc的区别
pandas中一个很便捷的使用方法通过loc、iloc、ix等索引方式,这里记录一下:df.loc[条件,新增列]=赋初始值如果新增列名为已有列名,则在原来的数
在上一篇博客中,我们已经仔细讲解了iloc和loc,只是简单了提到了ix。这是因为相比于前2者,ix更复杂,也更让人迷惑。因此,本篇博客通过例子的解释试图来描述
在操作DataFrame时,肯定会经常用到loc,iloc,at等函数,各个函数看起来差不多,但是还是有很多区别的,我们一起来看下吧。首先,还是列出一个我们用的