您好,登錄后才能下訂單哦!
一開始自學Python的numpy、pandas時候,索引和切片把我都給弄暈了,特別是numpy的切片索引、布爾索引和花式索引,簡直就是大亂斗。但是最近由于版本的問題,從之前的Python2.7改用Python3.6 了,在3.6中提供了loc和iloc兩種索引方法,把ix這個方法給劃分開來了,所以很有必要做個總結和對比。
同理,索引列數據也是如此!
舉例說明:
1、分別使用loc、iloc、ix 索引第一行的數據:
(1)loc
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行號 columns=['c','d','e']#列號 df=pd.DataFrame(data,index=index,columns=columns)#生成一個數據框 #print df.loc['a'] ''' c 1 d 2 e 3 ''' print df.loc[0] #這個就會出現錯誤 ''' TypeError: cannot do label indexing on <class 'pandas.indexes.base.Index'> with these indexers [1] of <type 'int'> '''
(2)iloc
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行號 columns=['c','d','e']#列號 df=pd.DataFrame(data,index=index,columns=columns)#生成一個數據框 print df.iloc[0] ''' c 1 d 2 e 3 ''' print df.iloc['a'] ''' TypeError: cannot do positional indexing on <class 'pandas.indexes.base.Index'> with these indexers [a] of <type 'str'> '''
(3)ix
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行號 columns=['c','d','e']#列號 df=pd.DataFrame(data,index=index,columns=columns)#生成一個數據框 print df.ix[0] ''' c 1 d 2 e 3 ''' print df.ix['a'] ''' c 1 d 2 e 3 '''
2、分別使用loc、iloc、ix 索引第一列的數據:
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行號 columns=['c','d','e']#列號 df=pd.DataFrame(data,index=index,columns=columns)#生成一個數據框 print df.loc[:,['c']] print df.iloc[:,[0]] print df.ix[:,['c']] print df.ix[:,[0]] #結果都為 ''' c a 1 b 4 '''
3、分別使用loc、iloc、ix 索引多行的數據:
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行號 columns=['c','d','e']#列號 df=pd.DataFrame(data,index=index,columns=columns)#生成一個數據框 print df.loc['a':'b'] print df.iloc[0:1] print df.ix['a':'b'] print df.ix[0:1] #結果都為 ''' c d e a 1 2 3 b 4 5 6 '''
4、分別使用loc、iloc、ix 索引多列的數據:
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行號 columns=['c','d','e']#列號 df=pd.DataFrame(data,index=index,columns=columns)#生成一個數據框 print df.loc[:,'c':'d'] print df.iloc[:,0:2] print df.ix[:,'c':'d'] print df.ix[:,0:2] #結果都為 ''' c d a 1 2 b 4 5 '''
5、loc、iloc、ix使用切片的區別
loc、iloc、ix對于切片的索引數據就兩種情況,按照標簽切片索引和按照位置編號切片索引
In [20]: df.loc['ind0':'ind3'] Out[20]: col0 col1 col2 col3 col4 ind0 0 1 2 3 4 ind1 5 6 7 8 9 ind2 10 11 12 13 14 ind3 15 16 17 18 19 In [21]: df.iloc[0:3] Out[21]: col0 col1 col2 col3 col4 ind0 0 1 2 3 4 ind1 5 6 7 8 9 ind2 10 11 12 13 14
區別不在于用哪種方法,而是通過標簽索引將會將切片末端包含進去,通過位置編號索引不會講切片末端包含進去。同樣的都是第一行到第四行,通過loc就會把1,2,3,4行都提取出來,通過iloc就只能把1,2,3行提取出來。ix方法也是一樣,知識方法不同而已。
In [23]: df.ix['ind0':'ind3'] Out[23]: col0 col1 col2 col3 col4 ind0 0 1 2 3 4 ind1 5 6 7 8 9 ind2 10 11 12 13 14 ind3 15 16 17 18 19 In [24]: df.ix[0:3] Out[24]: col0 col1 col2 col3 col4 ind0 0 1 2 3 4 ind1 5 6 7 8 9 ind2 10 11 12 13 14
對于列的切片跟行的一樣。
這里討論了基本的索引和切片,如果有用詞不當的地方請提出來,我將積極改正,或者有其他有關花式索引、布爾索引的問題也可以大家一起討論討論!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。