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']))