如何在pandas中使用ix-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何在pandas中使用ix,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

站在用戶的角度思考問題,與客戶深入溝通,找到巴宜網(wǎng)站設(shè)計(jì)與巴宜網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋巴宜地區(qū)。

首先,再次介紹這三種方法的概述:

  • loc gets rows (or columns) with particular labels from the index. loc從索引中獲取具有特定標(biāo)簽的行(或列)。

  • iloc gets rows (or columns) at particular positions in the index (so it only takes integers). iloc在索引中的特定位置獲取行(或列)(因此它只接受整數(shù))。

  • ix usually tries to behave like loc but falls back to behaving like iloc if a label is not present in the index. ix通常會(huì)嘗試像loc一樣行為,但如果索引中不存在標(biāo)簽,則會(huì)退回到像iloc一樣的行為。(這句話有些繞口,沒關(guān)系,關(guān)于ix特點(diǎn),后面會(huì)詳細(xì)講解)

1 使用ix切分Series

請注意:在pandas版本0.20.0及其以后版本中,ix已經(jīng)不被推薦使用,建議采用iloc和loc實(shí)現(xiàn)ix。這是為什么呢?這是由于ix的復(fù)雜特點(diǎn)可能使ix使用起來有些棘手:

  1. 如果索引是整數(shù)類型,則ix將僅使用基于標(biāo)簽的索引,而不會(huì)回退到基于位置的索引。如果標(biāo)簽不在索引中,則會(huì)引發(fā)錯(cuò)誤。

  2. 如果索引不僅包含整數(shù),則給定一個(gè)整數(shù),ix將立即使用基于位置的索引而不是基于標(biāo)簽的索引。但是,如果ix被賦予另一種類型(例如字符串),則它可以使用基于標(biāo)簽的索引。

接下來舉例說明這2個(gè)特點(diǎn)。

1.1 特點(diǎn)1舉例

>>> s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])
>>> s
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN

現(xiàn)在我們來看使用整數(shù)3切片有什么結(jié)果:

在這個(gè)例子中,s.iloc[:3]讀取前3行(因?yàn)閕loc把3看成是位置position),而s.loc[:3]讀取的是前8行(因?yàn)閘oc把3看作是索引的標(biāo)簽label)

>>> s.iloc[:3] # slice the first three rows
49 NaN
48 NaN
47 NaN
 
>>> s.loc[:3] # slice up to and including label 3
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN
 
>>> s.ix[:3] # the integer is in the index so s.ix[:3] works like loc
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
2 NaN
3 NaN

注意:s.ix[:3]返回的結(jié)果與s.loc[:3]一樣,這是因?yàn)槿绻鹲eries的索引是整型的話,ix會(huì)首先去尋找索引中的標(biāo)簽3而不是去找位置3。

如果,我們試圖去找一個(gè)不在索引中的標(biāo)簽,比如說是6呢?

>>> s.iloc[:6]
49 NaN
48 NaN
47 NaN
46 NaN
45 NaN
1 NaN
 
>>> s.loc[:6]
KeyError: 6
 
>>> s.ix[:6]
KeyError: 6

在上面的例子中,s.iloc[:6]正如我們所期望的,返回了前6行。而,s.loc[:6]返回了KeyError錯(cuò)誤,這是因?yàn)闃?biāo)簽6并不在索引中。

那么,s.ix[:6]報(bào)錯(cuò)的原因是什么呢?正如我們在ix的特點(diǎn)1所說的那樣,如果索引只有整數(shù)類型,那么ix僅使用基于標(biāo)簽的索引,而不會(huì)回退到基于位置的索引。如果標(biāo)簽不在索引中,則會(huì)引發(fā)錯(cuò)誤。

1.2 特點(diǎn)2舉例

接著例子1來說,如果我們的索引是一個(gè)混合的類型,即不僅僅包括整型,也包括其他類型,如字符類型。那么,給ix一個(gè)整型數(shù)字,ix會(huì)立即使用iloc操作,而不是報(bào)KeyError錯(cuò)誤。

>>> s2 = pd.Series(np.nan, index=['a','b','c','d','e', 1, 2, 3, 4, 5])
>>> s2.index.is_mixed() # index is mix of different types
True
>>> s2.ix[:6] # now behaves like iloc given integer
a NaN
b NaN
c NaN
d NaN
e NaN
1 NaN

注意:在這種情況下,ix也可以接受非整型,這樣就是loc的操作:

>>> s2.ix[:'c'] # behaves like loc given non-integer
a NaN
b NaN
c NaN

這個(gè)例子就說明了ix特點(diǎn)2。

正如前面所介紹的,ix的使用有些復(fù)雜。如果僅使用位置或者標(biāo)簽進(jìn)行切片,使用iloc或者loc就行了,請避免使用ix。

2 在Dataframe中使用ix實(shí)現(xiàn)復(fù)雜切片

有時(shí)候,在使用Dataframe進(jìn)行切片時(shí),我們想混合使用標(biāo)簽和位置來對(duì)行和列進(jìn)行切片。那么,應(yīng)該怎么操作呢?

舉例,考慮有下述例子中的Dataframe。我們想得到直到包含標(biāo)簽'c'的行和前4列。

>>> df = pd.DataFrame(np.nan, 
      index=list('abcde'),
      columns=['x','y','z', 8, 9])
>>> df
 x y z 8 9
a NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN

在pandas的早期版本(0.20.0)之前,ix可以很好地實(shí)現(xiàn)這個(gè)功能。

我們可以使用標(biāo)簽來切分行,使用位置來切分列(請注意:因?yàn)?并不是列的名字,因?yàn)閕x在列上是使用的iloc)。

>>> df.ix[:'c', :4]
 x y z 8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

在pandas的后來版本中,我們可以使用iloc和其它的一個(gè)方法就可以實(shí)現(xiàn)上述功能:

>>> df.iloc[:df.index.get_loc('c') + 1, :4]
 x y z 8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

get_loc() 是得到標(biāo)簽在索引中的位置的方法。請注意,因?yàn)槭褂胕loc切片時(shí)不包括最后1個(gè)點(diǎn),因?yàn)槲覀儽仨毤?。

可以看到,只使用iloc更好用,因?yàn)椴槐乩頃?huì)ix的那2個(gè)“繁瑣”的特點(diǎn)。

關(guān)于如何在pandas中使用ix就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前標(biāo)題:如何在pandas中使用ix-創(chuàng)新互聯(lián)
本文來源:http://www.muchs.cn/article6/dpggig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司網(wǎng)站設(shè)計(jì)、商城網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管