序列(Series
)是一維的,由一組有序的數據以及與之相關的索引組成,可以保存任何類型的數據(整數,字符串,浮點數,Python對象等)的一維數組。軸標籤和下標統稱爲索引,能夠經過索引來訪問Series對象中的元素。html
序列的構造函數定義是:數組
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)
構造函數的參數:函數
索引的下標是自動生成的,從0開始,加1遞增。對於序列的data,能夠經過序列的屬性values來訪問;對於序列的索引,能夠經過序列的屬性index來訪問。spa
1,建立空的序列code
s=pd.Series()
2,使用ndarray建立序列htm
建立ndarray的一維數組,構造序列,序列包含兩部分:索引和序列值,以下所示對象
>>> data=np.array(['a','b']) >>> pd.Series(data) 0 a 1 b dtype: object
最左側的0和1是行索引,a和b是值,在構造序列時,沒有傳遞任何索引,默認狀況下,pandas分配了從 0 到 len(data)-1 的索引,也能夠在構造函數中傳遞自定義的索引列表,以下所示:blog
>>> pd.Series(data,index=[101,102]) 101 a 102 b dtype: object
3,從列表構造序列索引
使用列表做爲data 參數來構造序列,對於索引,可使用默認值,也能夠自定義索引標籤:文檔
s=pd.Series([4,7,-5,3])
s=pd.Series([4,7,-5,3],index=['d','b','a','c'])
4,從字典構造序列
能夠直接經過字典來建立Series,其中,字典的key做爲序列的索引,字典的value做爲序列值:
>>> sdata = {'b': 12, 'a': 13, 'd': 14, 'c': 10} >>> sd=pd.Series(sdata) b 12 a 13 d 14 c 10 dtype: int64
5,設置多級別的索引
index參數能夠設置爲多個索引,每一個索引的長度都是相同的。
>>> arrays = [np.array(['qux', 'qux', 'foo', 'foo', ... 'baz', 'baz', 'bar', 'bar']), ... np.array(['two', 'one', 'two', 'one', ... 'two', 'one', 'two', 'one'])] ... >>> s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8], index=arrays) >>> s qux two 1 one 2 foo two 3 one 4 baz two 5 one 6 bar two 7 one 8 dtype: int64
序列元素的訪問,能夠經過索引,下標,索引是在構造函數中經過index參數傳遞或構造的,而下標是默認生成的,第一個元素的下標值是0,依次加1遞增。
1,經過下標來訪問序列
下表從0開始,依次加1遞增,訪問序列的第一個元素:
>>> sd[0]
12
訪問序列的前三個元素,下表爲負,表示從方向來訪問:
sd[:3]
sd[-3:]
2,經過索引標籤來訪問序列的元素
經過索引來訪問序列的元素,並能夠修改序列元素的值
sd['a']=4
也能夠傳遞多個索引標籤:
>>> sd[['a','b']] a 13 b 12
序列對象包含的屬性:
序列對象還能經過屬性來訪問序列的元素值。
1,at和iat屬性,用於訪問單個序列元素值
at屬性表示的是索引標籤和元素值對,經過索引標籤訪問單個序列值
>>> sd.at['a'] 13
iat屬性表示的下表和元素值對,經過下表訪問序列的單個元素值:
>>> sd.iat[1]
13
2,loc和iloc,經過序列的位置來訪問元素
iloc:純粹基於整數位置的索引,用於按位置選擇序列元素
loc:經過索引標籤和布爾值數組來選擇序列的元素
舉個例子,經過整數序列來選擇序列的元素:
>>> sd.iloc[0:2] b 12 a 13
舉個例子,經過索引的標籤來選擇序列的元素:
>>> sd.loc[['a','b']] a 13 b 12 dtype: int64
3,ix屬性
ix屬性是最首要的標籤-位置的索引器,具備整數位置的回退,注意,不推薦使用ix索引器。
舉個例子,ix索引器既支持整數,也支持標籤的訪問。
>>> sd.ix[1] >>> sd.ix['a']
4,get()和key函數
get(key):key參數能夠是索引的下標,也能夠是索引的標籤,根據key返回相應的value
keys():該函數返回序列的全部索引標籤
>>> sd.keys() Index(['b', 'a', 'd', 'c'], dtype='object') >>> sd.get('a') 13 >>> sd.get(0) 12
5,得到懶惰迭代器
能夠經過序列的__iter__()函數得到值的迭代器,也能夠經過items()或iteritems()函數得到包含索引和值的元組的迭代器:
Series.__iter__(self) #Return an iterator of the values. Series.items(self) #Lazily iterate over (index, value) tuples. Series.iteritems(self) #Lazily iterate over (index, value) tuples.
例如,經過items()函數得到序列的迭代器,並經過for循環來打印序列的值
>>> for t in sd.items(): ... print(t) ... ('b', 12) ('a', 13) ('d', 14) ('c', 10)
按照條件選擇序列的特定行,可使用序列的loc或iloc屬性,並使用布爾索引來篩選序列的數據行:
>>> sd.loc[sd>12] a 13 d 14 dtype: int64
也可使用邏輯表達式對條件進行組合計算:
>>> sd.loc[(sd>12) & (sd<14)] a 13 dtype: int64 >>> sd.loc[(sd>12) | (sd<14)] b 12 a 13 d 14 c 10 dtype: int64
注意,必須用小括號把兩個邏輯表達式括起來,否則會報錯:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
查看序列的邏輯表達式的值:
>>> (sd>12) & (sd<14)
b False
a True
d False
c False
dtype: bool
參考文檔: