這篇文章將為大家詳細講解有關如何在pandas中使用ix,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
站在用戶的角度思考問題,與客戶深入溝通,找到巴宜網(wǎng)站設計與巴宜網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋巴宜地區(qū)。首先,再次介紹這三種方法的概述:
loc gets rows (or columns) with particular labels from the index. loc從索引中獲取具有特定標簽的行(或列)。
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通常會嘗試像loc一樣行為,但如果索引中不存在標簽,則會退回到像iloc一樣的行為。(這句話有些繞口,沒關系,關于ix特點,后面會詳細講解)
1 使用ix切分Series
請注意:在pandas版本0.20.0及其以后版本中,ix已經(jīng)不被推薦使用,建議采用iloc和loc實現(xiàn)ix。這是為什么呢?這是由于ix的復雜特點可能使ix使用起來有些棘手:
如果索引是整數(shù)類型,則ix將僅使用基于標簽的索引,而不會回退到基于位置的索引。如果標簽不在索引中,則會引發(fā)錯誤。
如果索引不僅包含整數(shù),則給定一個整數(shù),ix將立即使用基于位置的索引而不是基于標簽的索引。但是,如果ix被賦予另一種類型(例如字符串),則它可以使用基于標簽的索引。
接下來舉例說明這2個特點。
1.1 特點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é)果:
在這個例子中,s.iloc[:3]讀取前3行(因為iloc把3看成是位置position),而s.loc[:3]讀取的是前8行(因為loc把3看作是索引的標簽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]一樣,這是因為如果series的索引是整型的話,ix會首先去尋找索引中的標簽3而不是去找位置3。
如果,我們試圖去找一個不在索引中的標簽,比如說是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錯誤,這是因為標簽6并不在索引中。
那么,s.ix[:6]報錯的原因是什么呢?正如我們在ix的特點1所說的那樣,如果索引只有整數(shù)類型,那么ix僅使用基于標簽的索引,而不會回退到基于位置的索引。如果標簽不在索引中,則會引發(fā)錯誤。
1.2 特點2舉例
接著例子1來說,如果我們的索引是一個混合的類型,即不僅僅包括整型,也包括其他類型,如字符類型。那么,給ix一個整型數(shù)字,ix會立即使用iloc操作,而不是報KeyError錯誤。
>>> 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
這個例子就說明了ix特點2。
正如前面所介紹的,ix的使用有些復雜。如果僅使用位置或者標簽進行切片,使用iloc或者loc就行了,請避免使用ix。
2 在Dataframe中使用ix實現(xiàn)復雜切片
有時候,在使用Dataframe進行切片時,我們想混合使用標簽和位置來對行和列進行切片。那么,應該怎么操作呢?
舉例,考慮有下述例子中的Dataframe。我們想得到直到包含標簽'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可以很好地實現(xiàn)這個功能。
我們可以使用標簽來切分行,使用位置來切分列(請注意:因為4并不是列的名字,因為ix在列上是使用的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和其它的一個方法就可以實現(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() 是得到標簽在索引中的位置的方法。請注意,因為使用iloc切片時不包括最后1個點,因為我們必須加1。
可以看到,只使用iloc更好用,因為不必理會ix的那2個“繁瑣”的特點。
關于如何在pandas中使用ix就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當前標題:如何在pandas中使用ix-創(chuàng)新互聯(lián)
本文來源:http://aaarwkj.com/article6/dpggig.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、網(wǎng)站設計、商城網(wǎng)站、外貿(mào)網(wǎng)站建設、品牌網(wǎng)站制作、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)