Series結(jié)構(gòu),,也稱Series序列,,是Pandas常用的數(shù)據(jù)結(jié)構(gòu)之一,它是一種類似于一維數(shù)組的結(jié)構(gòu),,由一組數(shù)據(jù)值(value)和一組標(biāo)簽組成,,其中標(biāo)簽與數(shù)據(jù)值之間是一一對(duì)應(yīng)的關(guān)系。 Series可以保存任何數(shù)據(jù)類型,,比如整數(shù),、字符串,、浮點(diǎn)數(shù),、Python對(duì)象等,它的標(biāo)簽?zāi)J(rèn)為整數(shù),,從0開(kāi)始依次遞增,。Series的結(jié)構(gòu)圖,如下所示: 通過(guò)標(biāo)簽我們可以更加直觀地查看數(shù)據(jù)所在的索引位置,。 創(chuàng)建Series對(duì)象 Pandas使用Series()函數(shù)來(lái)創(chuàng)建Series對(duì)象,,通過(guò)這個(gè)對(duì)象可以調(diào)用相應(yīng)的方法和屬性,從而達(dá)到處理數(shù)據(jù)的目的: import pandas as pd
s=pd.Series( data, index, dtype, copy)12復(fù)制代碼類型:[python] 參數(shù)說(shuō)明如下所示: 參數(shù)名稱 | 描述 |
---|
data | 輸入的數(shù)據(jù),,可以是列表,、常量,、ndarray 數(shù)組等。 | index | 索引值必須是惟一的,,如果沒(méi)有傳遞索引,,則默認(rèn)為 np.arrange(n)。 | dtype | dtype表示數(shù)據(jù)類型,,如果沒(méi)有提供,,則會(huì)自動(dòng)判斷得出。 | copy | 表示對(duì) data 進(jìn)行拷貝,,默認(rèn)為 False,。
|
我們也可以使用數(shù)組、字典,、標(biāo)量值或者Python對(duì)象來(lái)創(chuàng)建Series對(duì)象,。下面展示了創(chuàng)建Series對(duì)象的不同方法: 1)創(chuàng)建一個(gè)空Series對(duì)象 使用以下方法可以創(chuàng)建一個(gè)空的Series對(duì)象,如下所示: import pandas as pd#輸出數(shù)據(jù)為空s = pd.Series()
print(s)1234復(fù)制代碼類型:[python] 輸出結(jié)果如下: Series([], dtype: float64)1復(fù)制代碼類型:[python] 2)ndarray創(chuàng)建Series對(duì)象 ndarray是NumPy中的數(shù)組類型,,當(dāng)data是ndarry時(shí),,傳遞的索引必須具有與數(shù)組相同的長(zhǎng)度。假如沒(méi)有給index參數(shù)傳參,,在默認(rèn)情況下,,索引值將使用是range(n)生成,其中n代表數(shù)組長(zhǎng)度,,如下所示: [0,1,2,3…. range(len(array))-1]1復(fù)制代碼類型:[python] 使用默認(rèn)索引,,創(chuàng)建Series序列對(duì)象: import pandas as pdimport numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)print (s)12345復(fù)制代碼類型:[python] 輸出結(jié)果如下: 0 a1 b2 c3 d
dtype: object12345復(fù)制代碼類型:[python] 上述示例中沒(méi)有傳遞任何索引,所以索引默認(rèn)從0開(kāi)始分配,,其索引范圍為0到len(data)-1,,即0到3。這種設(shè)置方式被稱為“隱式索引”,。 除了上述方法外,,你也可以使用“顯式索引”的方法定義索引標(biāo)簽,示例如下: import pandas as pdimport numpy as np
data = np.array(['a','b','c','d'])#自定義索引標(biāo)簽(即顯示索引)s = pd.Series(data,index=[100,101,102,103])
print(s)123456復(fù)制代碼類型:[python] 輸出結(jié)果: 100 a101 b102 c103 d
dtype: object12345復(fù)制代碼類型:[python] 3)dict創(chuàng)建Series對(duì)象 您可以把dict作為輸入數(shù)據(jù),。如果沒(méi)有傳入索引時(shí)會(huì)按照字典的鍵來(lái)構(gòu)造索引,;反之,當(dāng)傳遞了索引時(shí)需要將索引標(biāo)簽與字典中的值一一對(duì)應(yīng),。 下面兩組示例分別對(duì)上述兩種情況做了演示,。 示例1,沒(méi)有傳遞索引時(shí): import pandas as pdimport numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print(s)12345復(fù)制代碼類型:[python] 輸出結(jié)果: a 0.0b 1.0c 2.0dtype: float641234復(fù)制代碼類型:[python] 示例2,,為index參數(shù)傳遞索引時(shí): import pandas as pdimport numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print(s)12345復(fù)制代碼類型:[python] 輸出結(jié)果: b 1.0c 2.0d NaN
a 0.0dtype: float6412345復(fù)制代碼類型:[python] 當(dāng)傳遞的索引值無(wú)法找到與其對(duì)應(yīng)的值時(shí),,使用NaN(非數(shù)字)填充。 4)標(biāo)量創(chuàng)建Series對(duì)象 如果data是標(biāo)量值,,則必須提供索引,,示例如下: import pandas as pdimport numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print(s)1234復(fù)制代碼類型:[python] 輸出如下: 0 51 52 53 5dtype: int6412345復(fù)制代碼類型:[python] 標(biāo)量值按照index的數(shù)量進(jìn)行重復(fù),,并與其一一對(duì)應(yīng)。 訪問(wèn)Series數(shù)據(jù) 上述講解了創(chuàng)建Series對(duì)象的多種方式,,那么我們應(yīng)該如何訪問(wèn)Series序列中元素呢,?分為兩種方式,一種是位置索引訪問(wèn),;另一種是索引標(biāo)簽訪問(wèn),。 1)位置索引訪問(wèn) 這種訪問(wèn)方式與ndarray和list相同,使用元素自身的下標(biāo)進(jìn)行訪問(wèn),。我們知道數(shù)組的索引計(jì)數(shù)從0開(kāi)始,,這表示第一個(gè)元素存儲(chǔ)在第0個(gè)索引位置上,以此類推,,就可以獲得Series序列中的每個(gè)元素,。下面看一組簡(jiǎn)單的示例: import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[0]) #位置下標(biāo)print(s['a']) #標(biāo)簽下標(biāo)1234復(fù)制代碼類型:[python] 輸出結(jié)果: 1112復(fù)制代碼類型:[java] 通過(guò)切片的方式訪問(wèn)Series序列中的數(shù)據(jù),示例如下: import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[:3])123復(fù)制代碼類型:[python] 輸出結(jié)果: a 1b 2c 3dtype: int641234復(fù)制代碼類型:[python] 如果想要獲取最后三個(gè)元素,,也可以使用下面的方式: import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[-3:])123復(fù)制代碼類型:[python] 輸出結(jié)果: c 3d 4e 5dtype: int641234復(fù)制代碼類型:[python] 2)索引標(biāo)簽訪問(wèn) Series類似于固定大小的dict,,把index中的索引標(biāo)簽當(dāng)做key,而把Series序列中的元素值當(dāng)做value,,然后通過(guò)index索引標(biāo)簽來(lái)訪問(wèn)或者修改元素值,。 示例1,使用索標(biāo)簽訪問(wèn)單個(gè)元素值: import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])
print(s['a'])123復(fù)制代碼類型:[python] 輸出結(jié)果: 61復(fù)制代碼類型:[python] 示例2,,使用索引標(biāo)簽訪問(wèn)多個(gè)元素值 import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])
print(s[['a','c','d']])123復(fù)制代碼類型:[python] 輸出結(jié)果: a 6c 8d 9dtype: int641234復(fù)制代碼類型:[python] 示例3,,如果使用了index中不包含的標(biāo)簽,則會(huì)觸發(fā)異常: import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])#不包含f值print(s['f'])1234復(fù)制代碼類型:[python] 輸出結(jié)果: ......
KeyError: 'f'12復(fù)制代碼類型:[python] Series常用屬性 下面我們介紹Series的常用屬性和方法,。在下表列出了Series對(duì)象的常用屬性,。 名稱 | 屬性 |
---|
axes | 以列表的形式返回所有行索引標(biāo)簽。 | dtype | 返回對(duì)象的數(shù)據(jù)類型,。 | empty | 返回一個(gè)空的 Series 對(duì)象,。 | ndim | 返回輸入數(shù)據(jù)的維數(shù)。 | size | 返回輸入數(shù)據(jù)的元素?cái)?shù)量,。 | values | 以 ndarray 的形式返回 Series 對(duì)象,。 | index | 返回一個(gè)RangeIndex對(duì)象,用來(lái)描述索引的取值范圍,。 |
現(xiàn)在創(chuàng)建一個(gè)Series對(duì)象,,并演示如何使用上述表格中的屬性,。如下所示: import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(5))
print(s)1234復(fù)制代碼類型:[python] 輸出結(jié)果: 0 0.8980971 0.7302102 2.3074013 -1.7230654 0.346728dtype: float64123456復(fù)制代碼類型:[python] 上述示例的行索引標(biāo)簽是[0,1,2,3,4],。 1)axes import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(5))print ("The axes are:")
print(s.axes)12345復(fù)制代碼類型:[python] 輸出結(jié)果 The axes are:
[RangeIndex(start=0, stop=5, step=1)]12復(fù)制代碼類型:[python] 2)dtype import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(5))print ("The dtype is:")
print(s.dtype)12345復(fù)制代碼類型:[python] 輸出結(jié)果: The dtype is:
float6412復(fù)制代碼類型:[python] 3)empty 返回一個(gè)布爾值,用于判斷數(shù)據(jù)對(duì)象是否為空,。示例如下: import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(5))
print("是否為空對(duì)象?")print (s.empty)12345復(fù)制代碼類型:[python] 輸出結(jié)果: 是否為空對(duì)象?False12復(fù)制代碼類型:[python] 4)ndim 查看序列的維數(shù),。根據(jù)定義,,Series是一維數(shù)據(jù)結(jié)構(gòu),因此它始終返回1,。 import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(5))print (s)print (s.ndim)12345復(fù)制代碼類型:[python] 輸出結(jié)果: 0 0.3114851 1.7488602 -0.0227213 -0.1292234 -0.489824dtype: float6411234567復(fù)制代碼類型:[python] 5)size 返回Series對(duì)象的大小(長(zhǎng)度),。 import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(3))print (s)#series的長(zhǎng)度大小print(s.size)123456復(fù)制代碼類型:[python] 輸出結(jié)果: 0 -1.8662611 -0.6367262 0.586037dtype: float64312345復(fù)制代碼類型:[python] 6)values 以數(shù)組的形式返回Series對(duì)象中的數(shù)據(jù)。 import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(6))
print(s)
print("輸出series中數(shù)據(jù)")
print(s.values)123456復(fù)制代碼類型:[python] 輸出結(jié)果: 0 -0.5021001 0.6961942 -0.9820633 0.4164304 -1.3845145 0.444303dtype: float64
輸出series中數(shù)據(jù)
[-0.50210028 0.69619407 -0.98206327 0.41642976 -1.38451433 0.44430257]123456789復(fù)制代碼類型:[python] 7)index 該屬性用來(lái)查看Series中索引的取值范圍,。示例如下: #顯示索引import pandas as pd
s=pd.Series([1,2,5,8],index=['a','b','c','d'])
print(s.index)#隱式索引s1=pd.Series([1,2,5,8])
print(s1.index)1234567復(fù)制代碼類型:[python] 輸出結(jié)果: 隱式索引:
Index(['a', 'b', 'c', 'd'], dtype='object')
顯示索引:
RangeIndex(start=0, stop=4, step=1)1234復(fù)制代碼類型:[python] Series常用方法 1)head()&tail()查看數(shù)據(jù) 如果想要查看Series的某一部分?jǐn)?shù)據(jù),,可以使用head()或者tail()方法。其中head()返回前n行數(shù)據(jù),,默認(rèn)顯示前5行數(shù)據(jù),。示例如下: import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(5))print ("The original series is:")print (s)#返回前三行數(shù)據(jù)print (s.head(3))1234567復(fù)制代碼類型:[python] 輸出結(jié)果: 原系列輸出結(jié)果:0 1.2496791 0.6364872 -0.9876213 0.9996134 1.607751head(3)輸出:
dtype: float640 1.2496791 0.6364872 -0.987621dtype: float64123456789101112復(fù)制代碼類型:[python] tail()返回的是后n行數(shù)據(jù),默認(rèn)為后5行,。示例如下: import pandas as pdimport numpy as np
s = pd.Series(np.random.randn(4))#原seriesprint(s)#輸出后兩行數(shù)據(jù)print (s.tail(2))1234567復(fù)制代碼類型:[python] 輸出結(jié)果: 原Series輸出:0 0.0533401 2.1658362 -0.7191753 -0.035178輸出后兩行數(shù)據(jù):
dtype: float642 -0.7191753 -0.035178dtype: float6412345678910復(fù)制代碼類型:[python] 2)isnull()&nonull()檢測(cè)缺失值 isnull()和nonull()用于檢測(cè)Series中的缺失值,。所謂缺失值,顧名思義就是值不存在,、丟失,、缺少。 isnull():如果為值不存在或者缺失,,則返回True,。 notnull():如果值不存在或者缺失,則返回False,。 其實(shí)不難理解,,在實(shí)際的數(shù)據(jù)分析任物中,數(shù)據(jù)的收集往往要經(jīng)歷一個(gè)繁瑣的過(guò)程,。在這個(gè)過(guò)程中難免會(huì)因?yàn)橐恍┎豢煽沽?,或者人為因素?dǎo)致數(shù)據(jù)丟失的現(xiàn)象。這時(shí),,我們可以使用相應(yīng)的方法對(duì)缺失值進(jìn)行處理,,比如均值插值、數(shù)據(jù)補(bǔ)齊等方法,。上述兩個(gè)方法就是幫助我們檢測(cè)是否存在缺失值,。示例如下: import pandas as pd#None代表缺失數(shù)據(jù)s=pd.Series([1,2,5,None])
print(pd.isnull(s)) #是空值返回Trueprint(pd.notnull(s)) #空值返回False12345復(fù)制代碼類型:[python] 輸出結(jié)果: 0 False1 False2 False3 Truedtype: boolnotnull():0 True1 True2 True3 Falsedtype: bool
|