第七篇,數據分析之pandas的索引對象

index對象

別忘了導入包:import pandas as pd

a = pd.Series(np.random.rand(5))
print(a.index)
print(a.index[0])
print(a.index[:3])

運行結果:

RangeIndex(start=0, stop=5, step=1)
0
RangeIndex(start=0, stop=3, step=1)

從上面代碼可以看出來index對象也是序列,這個序列兼具了數組的一些特徵,可以看成是一維數組,但跟一維數組的區別在於,index對象是不可變,這種特性使得它能被不同的Series對象或者DaraFrame對象使用。

pandas.index(data=None,dtype=None,copy=False,name-None,fastpath=False,tupleize_cols=True,**kwargs)

Index對象就是pd.Index()的實列。

a = pd.Index(['python','java','html5'])
b = pd.Series(['100','99','88'],index=a)
c = pd.DataFrame({'book':b,'teacher':['english','computer','math']},index=a)
print(b)
print(c)

運行結果:

python    100
java       99
html5      88
dtype: object
       book   teacher
python  100   english
java     99  computer
html5    88      math

最後關於Index對象,除了可以看作是一堆數組外,還可以看作是集合

MultiIndex對象

創建一個MultiIndex對象:

a = [('book','python'),('book','java'),('teacher','math'),('teacher','english')]
b = pd.MultiIndex.from_tuples(a)
c = pd.MultiIndex.from_arrays(a)
d = pd.MultiIndex.from_product([['a','b'],['100','200']])
print(b)
print(c)
print(d)

運行結果:

MultiIndex([(   'book',  'python'),
            (   'book',    'java'),
            ('teacher',    'math'),
            ('teacher', 'english')],
           )
MultiIndex([(  'book', 'book', 'teacher', 'teacher'),
            ('python', 'java',    'math', 'english')],
           )
MultiIndex([('a', '100'),
            ('a', '200'),
            ('b', '100'),
            ('b', '200')],
           )

from_tuples接收一個用列表或者類數組方式表示的多級索引
from_arrays所傳入的參數值也可以是類數組的其他序列,比如嵌套列表
from_product他是根據笛卡兒積的計算方法生成的MuliIndex對象

通過實例化類創建

參數列表

pd.MultiIndex(levels=None,labels=None,sortorder=None,names=None,cop=False,verify_integrity=True,_srt_identity=True,name=None,**kwargs)

要通過實例化pd.MultiIndex()創建一個不空的MultiIndex對象,就需要給levels與labels傳入值。levels:以序列類數據表示標籤索引,labels:以整數的方式表示每個標籤索引的位置。

print(pd.MultiIndex(levels=[['a','b'],[100,200]],labels=[[0,0,1,1,],[0,1,0,1]]))
MultiIndex([('a', 100),
            ('a', 200),
            ('b', 100),
            ('b', 200)],
           )

還可以使用實例化pd.Index()類創建MultiIndex對象

print(pd.Index([('a',100),('a',200),('b',100),('b',200)]))
MultiIndex([('a', 100),
            ('a', 200),
            ('b', 100),
            ('b', 200)],
           )

在數據中使用MultiIndex對象

a = [('book',2015),('book',2016),('teacher',2015),('teacher',2016)]
b = pd.MultiIndex.from_tuples(a)
c = pd.Series([2500,2600,2700,2800],index=b)
d = pd.DataFrame({'2015':[2500,2700],
                  '2016':[2600,2800]},
                 index=['book','teacher'])
print(c)
print(d)

運行結果:

book     2015    2500
         2016    2600
teacher  2015    2700
         2016    2800
dtype: int64
         2015  2016
book     2500  2600
teacher  2700  2800

還可以實現Series類型的對象和DataFrame類型的對象之間的互換。

print(c.unstack()) #Series類型轉換爲DataFrame類型
print(c.unstack().stack()) #逆過程,DataFrame類型再轉回Series類型
         2015  2016
book     2500  2600
teacher  2700  2800
book     2015    2500
         2016    2600
teacher  2015    2700
         2016    2800
dtype: int64

附加:

price = [32260,31545,154857,78979]
e = pd.DataFrame({'gdp':c,'Price':price})
print(e)
print(e.index)
               gdp   Price
book    2015  2500   32260
        2016  2600   31545
teacher 2015  2700  154857
        2016  2800   78979
MultiIndex([(   'book', 2015),
            (   'book', 2016),
            ('teacher', 2015),
            ('teacher', 2016)],
           )

可以看出來如果Series對象的索引是多級索引,並且它作爲DataFrame()類的字典參數中的一個value,那麼另外的value會根據Series對象的多級索引自動對齊,並且最終的DataFrame對象也使用Series對象的MultiIndex對象。
還有其他幾種方法也可以創建:

f = np.array([[2500,32260],[2600,31545],[2700,154857],[2800,78979]])
g = pd.DataFrame(f,index=[['book','book','teacher','teacher'],[2015,2016,2015,2016]],columns=['gdp','Price'])
print(g)

h = pd.MultiIndex.from_arrays([['book','book','teacher','teacher'],[2015,2016,2015,2016]])
print(pd.DataFrame(f,index=h,columns=['gdp','Price']))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章