详谈Pandas中iloc和loc以及ix的区别
Pandas库中有iloc和loc以及ix可以用来索引数据,抽取数据。但是方法一多也容易造成混淆。下面将一一来结合代码说清其中的区别。
1.iloc和loc的区别:
iloc主要使用数字来索引数据,而不能使用字符型的标签来索引数据。而loc则刚好相反,只能使用字符型标签来索引数据,不能使用数字来索引数据,不过有特殊情况,当数据框dataframe的行标签或者列标签为数字,loc就可以来其来索引。
好,先上代码,先上行标签和列标签都为数字的情况。
importpandasaspd importnumpyasnp a=np.arange(12).reshape(3,4) printa >>> [[0123] [4567] [891011]] df=pd.DataFrame(a) printdf >>> 0123 00123 14567 2891011 printdf.loc[0] >>> 00 11 22 33 Name:0,dtype:int32 printdf.iloc[0] 00 11 22 33 Name:0,dtype:int32 printdf.loc[:,[0,3]] 03 003 147 2811 printdf.iloc[:,[0,3]] 03 003 147 2811
接下来是把行标签[0,1,2]改成['a','b','c'],则成这样了。
df.index=['a','b','c'] printdf >>> 0123 a0123 b4567 c891011 printdf.loc[0] #TypeError:cannotdolabelindexingonwiththeseindexers[0]of printdf.iloc[0] >>> 00 11 22 33 Name:a,dtype:int32 printdf.iloc['a']#TypeError:cannotdopositionalindexingon withtheseindexers[a]of printdf.loc['a']#正确 >>> 00 11 22 33 Name:a,dtype:int32
同样地,把列标签[0,1,2,3]改成['A','B,'C','D'],则成这样了。
df.columns=['A','B','C','D'] printdf >>> ABCD a0123 b4567 c891011 printdf.loc[:,'A'] >>> a0 b4 c8 Name:A,dtype:int32 printdf.iloc[:,'A']#ValueError:Locationbasedindexingcanonlyhave[integer,integerslice(STARTpointisINCLUDED,ENDpointisEXCLUDED),listlikeofintegers,booleanarray]types
2.ix是一种混合索引,字符型标签和整型数据索引都可以。
printdf.ix[0] >>> A0 B1 C2 D3 Name:a,dtype:int32 printdf.ix['a'] >>> A0 B1 C2 D3 Name:a,dtype:int32 printdf.ix[:,0] >>> a0 b4 c8 Name:A,dtype:int32 printdf.ix[:,'A'] >>> a0 b4 c8 Name:A,dtype:int32
以上这篇详谈Pandas中iloc和loc以及ix的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。