最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解pandas中MultiIndex和對象實際索引不一致問題

 更新時間:2019年07月23日 14:17:29   作者:S_o_l_o_n  
這篇文章主要介紹了詳解pandas中MultiIndex和對象實際索引不一致問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在最新版的pandas中(不知道之前的版本有沒有這個問題),當我們對具有多層次索引的對象做切片或者通過df[bool_list]的方式索引的時候,得到的新的對象盡管實際索引已經(jīng)發(fā)生了改變,但是當直接使用df_new.index調(diào)取新對象的MultiIndex對象的時候,這個MultiIndex對象還是和原對象的索引保持一致的,而不是和新對象的實際索引保持一致。這點需要特別注意,因為正常情況下,我們自然會認為df.index的MultiIndex對象和df的實際索引是一致的,基于此,我們可能會寫出一些難以發(fā)現(xiàn)的bug??梢钥聪旅娴睦?。

import pandas as pd
 
df_t1=pd.DataFrame([[1,2],[2,3],[2,3],[3,5]],index=[['a','a','b','b'],[0,1,0,1]])
 
df_t1
Out[39]: 
   0 1
a 0 1 2
 1 2 3
b 0 2 3
 1 3 5
 
df_t2=df_t1.loc[[x=='a' for x in df_t1.index.levels[0]]]
 
df_t2 
Out[41]: 
   0 1
a 0 1 2
 
df_t2.index  #從上面df_t2對象的輸出結(jié)果和下面index的輸出結(jié)果可以發(fā)現(xiàn),df_t2的index和其實際的索引并不一致
Out[42]: 
MultiIndex(levels=[['a', 'b'], [0, 1]],
      codes=[[0], [0]])
 
df_t3=df_t1.iloc[:2,:]
 
df_t3
Out[46]: 
   0 1
a 0 1 2
 1 2 3
 
df_t3.index #從上面df_t3對象的輸出結(jié)果和下面index的輸出結(jié)果可以發(fā)現(xiàn),df_t3的index和其實際的索引也不一致
Out[47]: 
MultiIndex(levels=[['a', 'b'], [0, 1]],
      codes=[[0, 0], [0, 1]])

從上面的例子可以看出,當通過bool索引和切片索引時,就會出現(xiàn)這種問題,其他的索引方式一般不會出現(xiàn)這種問題。當遇到這種問題時,如果我們需要始終保持新對象的index得到的對象和實際索引一致,該如何做呢?請看下面代碼

df_t2.index.remove_unused_levels()
Out[62]: 
MultiIndex(levels=[['a'], [0]],
      codes=[[0], [0]])
 
df_t2.index=df_t2.index.remove_unused_levels()
 
df_t2.index
Out[75]: 
MultiIndex(levels=[['a'], [0]],
      codes=[[0], [0]])
 
df_t2
Out[76]: 
   0 1
a 0 1 2

可以看到,MultiIndex對象有一個remove_unused_levels()函數(shù),其作用是把沒有被使用的索引被去處掉,這樣就可以使得對象的MultiIndex對象和其實際顯示出來的索引保持一致了。故其實在遇到多層次索引的切片索引或者bool索引之后,加上一條df.index.remove_unused_levels()語句不失為一個好的習慣,或者至少得有這種意識,意識到此處可能會出現(xiàn)這種問題。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解pycharm2020.1.1專業(yè)版安裝指南(推薦)

    詳解pycharm2020.1.1專業(yè)版安裝指南(推薦)

    這篇文章主要介紹了pycharm2020.1.1專業(yè)版安裝指南,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Python如何利用opencv實現(xiàn)手勢識別

    Python如何利用opencv實現(xiàn)手勢識別

    這篇文章主要介紹了Python如何利用opencv實現(xiàn)手勢識別,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙可以參考一下
    2022-05-05
  • Python異常原理及異常捕捉實現(xiàn)過程解析

    Python異常原理及異常捕捉實現(xiàn)過程解析

    這篇文章主要介紹了Python異常原理及異常捕捉實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 最新評論

    桂林市| 太仓市| 通州区| 石渠县| 南通市| 平潭县| 邹城市| 双江| 清丰县| 竹北市| 昌江| 唐山市| 定边县| 桑日县| 和田县| 论坛| 新竹市| 岫岩| 册亨县| 修水县| 康乐县| 扬州市| 日土县| 柳林县| 望城县| 石景山区| 县级市| 固镇县| 合江县| 台中县| 瑞安市| 南乐县| 长春市| 望城县| 临夏县| 桃园市| 玉屏| 稷山县| 房山区| 错那县| 宾阳县|