python pandas庫的學習筆記一pandas的資料結構
阿新 • • 發佈:2019-01-28
要使用pandas,首先要熟悉他的兩個主要的資料結構:Series和DataFrame。
一、Series
Series 是一種類似於一維陣列的物件,由一組資料(各種numpy資料型別)以及一組與之相關的資料標籤(即索引)組成。
僅由一組資料即可產生最簡單的Series:
左邊是索引,右邊是值,這樣看起來Series好像更像dict或map這一類具有鍵值對的結構。>>> from pandas import Series,DataFrame >>> import pandas as pd >>> obj=pd.Series([4,7,-5,3]) >>> obj 0 4 1 7 2 -5 3 3 dtype: int64
>>> obj.values #值
array([ 4, 7, -5, 3], dtype=int64)
>>> obj.index #索引物件
RangeIndex(start=0, stop=4, step=1)
分別獲得值物件與索引物件。手動指定索引
通過索引取值:>>> obj1=Series([4,7,-5,3],index=['a','b','d','c']) >>> obj1 a 4 b 7 d -5 c 3 dtype: int64
>>> obj1['a']
4
>>> obj1[['a','d','b']] #獲取多個值
a 4
d -5
b 7
dtype: int64
陣列運算:
>>> obj1[obj1>0]
a 4
b 7
c 3
dtype: int64
>>> obj1*2
a 8
b 14
d -10
c 6
dtype: int64
既然Series的結構很像dict,自然也可以通過一個dict去建立Series
name屬性,Series物件本身及其索引都有一個name屬性>>> sdata={'ohio':3500,'Texas':710,'Utah':500} >>> obj2=Series(sdata) >>> obj2 Texas 710 Utah 500 ohio 3500 dtype: int64
>>> obj2.index.name='state'
>>> obj2.name='population'
>>> obj2
state #索引名
Texas 710
Utah 500
ohio 3500
Name: population, dtype: int64 #Series名
二.DataFrame
DataFrame是一個表格型的資料結構,含有一組有序的列,每列可以是不同的值型別(數值,字串,布林值等)。DataFrame既有行索引也有列索引,可以被看做是由Series組成的字典。DataFrame中的資料是以一個或多個二維塊存放的。
構建DataFrame
>>> data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
>>> frame=DataFrame(data)
>>> frame
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
結果會自動加上索引,且全部列被有序排列,注意是列被有序排列,即根據列名有序排列。
指定列的順序
>>> DataFrame(data,columns=['year','state','pop'])
year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9
如果傳入的列找不到,則會產生NAN
>>> frame2=DataFrame(data,columns=['year','state','pop','debt'] ,index=['one','two','three','four','five'])
>>> frame2
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
取值,通過類似陣列或屬性的方式,可以獲取某一列的資料(為一個Series)
>>> frame2['state'] #類似陣列的方式
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
Name: state, dtype: object
>>> frame2.year #類似屬性的方式
0 2000
1 2001
2 2002
3 2001
4 2002
Name: year, dtype: int64
注意,返回的Series擁有原DataFrame相同的索引,且其name屬性也已經被相應的設定好了。獲取行,行也可以通過位置或名稱的方式來進行獲取,比如用索引欄位ix
>>> frame2.ix[2]
year 2002
state Ohio
pop 3.6
debt NaN
Name: 2, dtype: object
列可以通過賦值的方式進行修改。如下,我們可以給空的”debt“列賦值一個標量或一組值。>>> import numpy as np
>>> frame2['dept']=np.arange(5) #為不存在的列賦值會建立一個新列
>>> frame2['debt']=12
>>> frame2
year state pop debt dept
0 2000 Ohio 1.5 12 0
1 2001 Ohio 1.7 12 1
2 2002 Ohio 3.6 12 2
3 2001 Nevada 2.4 12 3
4 2002 Nevada 2.9 12 4
刪除,關鍵詞del用於刪除列
>>> del frame2['pop']
>>> frame2
year state debt dept
0 2000 Ohio 12 0
1 2001 Ohio 12 1
2 2002 Ohio 12 2
3 2001 Nevada 12 3
4 2002 Nevada 12 4
另一種常見的資料形式是巢狀字典(也就是字典的字典),將它傳給DataFrame,就會被解釋為:外層字典的鍵作為列,內層鍵作為行索引。>>> pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7, 2002:3.6}}
>>> frame3=DataFrame(pop) #使用巢狀字典構造DataFrame
>>> frame3
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
對結果進行 轉置:>>> frame3.T
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6
設定index和columns的name屬性:
>>> frame3.index.name='year'
>>> frame3.columns.name='state'
>>> frame3
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
可以用於構造DataFrame的資料:
三、索引物件
pandas的索引物件負責管理標籤和其他元資料(比如軸名稱等)。構建Series或DataFrame時,所用到的任何陣列或其他序列的標籤都會被轉換成一個Index:
>>> obj=Series(range(3),index=['a','b','c'])
>>> obj.index
Index([u'a', u'b', u'c'], dtype='object')
Idex物件是不可修改的,因此使用者不能對其修改。不可修改性非常重要,因為這樣才能使得index物件在多個數據結構之間安全共享:>>> index=pd.Index(np.arange(3))
>>> obj2=Series([1.5,-2.5,0],index=index)
>>> obj2.index is index
True
index的方法和屬性:
參考:
《利用python進行資料分析》