前言
大家好!我是一朵向陽花(花花花),本期跟大家分享的知識是 pandas 數據結構——Series。
作者的【 Python 數據分析】專欄正在火熱更新中,如果本文對您有幫助,歡迎大家點贊 + 評論 + 收藏 !
每日金句分享:愿你有一天,能和你最重要的人重逢?!弧?艾拉「可塑性記憶」。
一、Series的創(chuàng)建
Series 是一種類似于一維數組的對象,由下面兩部分組成:
values
:一組數據,ndarray 類型index
:數據索引
顧名思義
,我們在創(chuàng)建Series
對象時,需要傳遞一組數據,該數據大多數時候是可迭代對象。因此,下面三種創(chuàng)建方式都是將數據傳入到 Series 方法中。
1.1 列表創(chuàng)建
list1 = list('ABCD') # 創(chuàng)建列表
s =pd.Series(list1) # 傳遞列表數據到 Series 方法中
print(s)
print(type(s.values))
print(type(s.index))
1.2 NumPy數組創(chuàng)建
n = np.array(range(5,10))
s2 = pd.Series(n)
s2
1.3 字典創(chuàng)建
前兩種方式,都是只傳遞了數據,那么索引是默認索引(0 ~ N-1);下面的字典創(chuàng)建方式,則是以字典的鍵為索引,字典的值為數據。
d = {
'a':11,'b':22,'c':33,'d':44
}
s = pd.Series(d)
s
二、Series索引
從以上 Series 的創(chuàng)建中我們可以看出,
Series 的索引是可以修改的
。我們先來探討以下索引的作用。
- 獲取元素
有多種獲取方式,s.索引名,s[‘索引名’],s.loc[‘索引名’]
- 允許修改
(為
s.index
重新賦值即可,注意前后數量一致)
顯式即表示使用索引名稱的方式,隱式即表示使用序號的方式。后面的顯式切片和隱式切片也是同理。
2.1 顯式索引
取單個值時,三種方式
:(假設Series
對象名為s
)
- s.索引名(數字索引不能用這種方式)
- s[‘索引名’]
- s.loc[‘索引名’]
取多個值時,返回一個新的 Series 對象,兩種方式
(也就是加中括號):
- s.[[‘索引名1’,‘索引名2’]]
- s.loc[[‘索引名1’,‘索引名2’]]
s = pd.Series(np.array(range(5,10)),index=list('abcde'),name='number')
print(s)
display(s.a,s['a'],s.loc['a'])
2.2 隱式索引
隱式索引和顯示索引的區(qū)別就是它通過數字來獲取值。因為是數字,因此
s.number
這種方式肯定不能用了
,其他都相同。
取單值,兩種方式
:
- s[number]
- s.iloc[number]
取多值,兩種方式
:
- s[[number1,number2]]
- s.iloc[[number1,number2]]
s = pd.Series(np.array(range(5,10)),index=list('abcde'),name='number')
print(s)
print('取單值')
print(s[1])
print(s.iloc[1])
print('取多值')
print(s[[1,2]])
print(s.iloc[[1,2]])
三、Series切片
切片操作是獲取一個新的 Series 對象的操作,
顯式切片是為左閉右臂,隱式切片時為左閉右開
。
2.1 顯式切片
兩種方式:
- s[索引名1:索引名2]
- s.loc[索引名1:索引名2]
2.2 隱式切片
兩種方式:
- s[number1:number2]
- s.iloc[number1:number2]
s = pd.Series({
'yw':100,
'math':150,
'eng':110,
'Python':130
})
print('數據:',end='')
print('-'*10)
print(s)
print('-'*10)
print('顯式切片')
print(s['yw':'math'])
print('-'*10)
print(s.loc['yw':'math'])
print('-'*10)
print('隱式切片')
print(s[0:1])
print('-'*10)
print(s.iloc[0:1])
四、Series基本屬性和方法
Series基本屬性和方法是讓我們更好了解數據組成的手段。
4.1 屬性
屬性 | 作用 |
---|---|
s.shape | 查看數據行列 |
s.ndim | 查看維度,Series 就是一維,ndim 恒等于1 |
s.size | 查看數據總數 |
s.index | 查看索引 |
s.values | 查看數據 |
s.name | 查看 Series 對象的 name,若未設定則為空 |
4.2 方法
方法 | 功能 |
---|---|
s.head() | 查看前5條數據,若傳入數字 n ,則查看前 n 條 |
s.tail() | 查看后5條數據,若傳入數字 n ,則查看后 n 條 |
s.isnull() | 判斷數據是否為空,空的為 True ,不空的為 False |
s.notnull() | 判斷數據是否不空,空的為 False ,不空的為 True |
4.3 案例——使用 bool 值去除空值
原理:Series 切片可以再傳入一個 Series 對象,該 Series 對象索引要和原來相同,那么值為 False 的將不會被取出。
請看示例:
s = pd.Series(['a','e','f','b'])
s[pd.Series([True,True,False,True])]
如果改為:
s = pd.Series(['a','e','f','b'])
s[pd.Series([True,True,False,True],index=list('abcd'))]
那么將會報錯:
下面是 Series 去除空值的案例。
s = pd.Series(['zhangsan','lisi','a',np.NAN,None])
print('數據:'+'-'*10)
print(s)
conditon = s.isnull()
print('判空情況:'+'-'*10)
print(conditon)
# 使用 bool 值索引過濾數據
s = s[~conditon]
print('過濾結果:'+'-'*10)
print(s)
五、Series運算
Series 運算包括算術運算和 Series 對象之間運算。算術運算是針對每一個元素的,有 +、-、*、/、 //、 %、 ** 等,這里不再贅述。Series 對象間的運算,只要記住,
索引一個有一個沒有時,計算值為 NaN
,其他按照算術運算計算即可。
- 算術運算
s = pd.Series(np.array(range(5,10)))
print(s)
s * 10
- Series對象間的運算
s1 = pd.Series(np.array(range(5,10)))
s2 = pd.Series([3,6,10,12])
print(s1)
print(s2)
s1 + s2 # 索引一個有一個沒有時,計算值為 NaN
六、Series多層行索引
6.1 Series多層索引的構建
Series 不僅支持單層索引,還支持多層索引。最簡單的實現方式就是將
index
設置成多維。
下面以二級行索引為例:
s = pd.Series(np.random.randint(60,100,6),index=[['語文','語文','語文','數學','數學','數學'],['小明','小紅','小麗','小明','小紅','小麗']])
print(s)
6.2 Series多層索引的索引和切片操作
對于
Series
多層索引的索引和切片操作,只要記住以下兩點:
- 要先取第一層,再取第二層,不能直接取第二層索引
- 獲取到第一層之后,就是一個普通的單層索引 Series
- 隱式索引,直接得到數
具體的方式,還是索引和切片都分為顯式和隱式,下面通過一個案例來演示。
索引:
s = pd.Series(np.random.randint(60,100,6),index=[['語文','語文','語文','數學','數學','數學'],['小明','小紅','小麗','小明','小紅','小麗']])
print(s)
# 索引
print('顯式索引:'+'-'*10)
print(s['語文']) # 獲取到單層 Series
print(s.loc['語文'])
print(s['語文']['小明'],s.loc['語文']['小明']) # 獲取到單個值
print('隱式索引:'+'-'*10)
print(s.iloc[0])
print(s[0]) # 獲取到單個值
切片:
s = pd.Series(np.random.randint(60,100,6),index=[['語文','語文','語文','數學','數學','數學'],['小明','小紅','小麗','小明','小紅','小麗']])
s = s.sort_index()
print(s)
print('顯式切片'+'-'*10)
print(s['數學':'語文'])
print(s.loc['數學':'語文'])
print('隱式切片'+'-'*10)
print(s[0:2])
print(s.iloc[0:2])
結語
?? 本期跟大家分享的 “芝士” 就到此結束了,關于 Series 數據結構,你學會了嗎??
?? 我是向陽花花花花,在學習的路上一直前行,期待與你一起進步。~ ??文章來源:http://www.zghlxwxcb.cn/news/detail-548358.html
??如果文中有些地方不清楚的話,歡迎聯系我,我會給大家提供思路及解答。??文章來源地址http://www.zghlxwxcb.cn/news/detail-548358.html
相關導讀
文章直達 | 鏈接 |
---|---|
上期回顧 | 【數據分析 - 基礎入門之pandas篇①】- pandas介紹 |
下期預告 | 【數據分析 - 基礎入門之pandas篇③】- pandas數據結構——DataFrame |
到了這里,關于【數據分析 - 基礎入門之pandas篇②】- pandas數據結構——Series的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!