中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas ix &iloc &loc的區別

發布時間:2020-09-05 12:06:21 來源:腳本之家 閱讀:212 作者:memoryqiu 欄目:開發技術

一開始自學Python的numpy、pandas時候,索引和切片把我都給弄暈了,特別是numpy的切片索引、布爾索引和花式索引,簡直就是大亂斗。但是最近由于版本的問題,從之前的Python2.7改用Python3.6 了,在3.6中提供了loc和iloc兩種索引方法,把ix這個方法給劃分開來了,所以很有必要做個總結和對比。

  • loc——通過行標簽索引行數據
  • iloc——通過行號索引行數據
  • ix——通過行標簽或者行號索引行數據(基于loc和iloc 的混合)

同理,索引列數據也是如此!

舉例說明:

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

 對于列的切片跟行的一樣。

這里討論了基本的索引和切片,如果有用詞不當的地方請提出來,我將積極改正,或者有其他有關花式索引、布爾索引的問題也可以大家一起討論討論!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青川县| 息烽县| 开平市| 荔波县| 封丘县| 曲靖市| 梓潼县| 吉木萨尔县| 云梦县| 温泉县| 昌邑市| 凉城县| 观塘区| 诏安县| 双牌县| 慈利县| 页游| 万盛区| 兴城市| 同心县| 晋州市| 静安区| 东兰县| 兴安盟| 航空| 高雄县| 鹤壁市| 新兴县| 德令哈市| 清水县| 通州区| 盐城市| 潜山县| 广东省| 新巴尔虎左旗| 贵州省| 文昌市| 竹溪县| 黄梅县| 札达县| 连城县|