Pandas經常使用的兩種數據類型之「Series」

關於Pandas
Pandas庫基於Numpy庫,提供了不少用於數據操做與分析的功能。數組

1.安裝與使用
安裝:
pip install pandas
根據慣例,咱們使用以下的方式引入pandas:import pandas as pd
兩個經常使用數據類型:
pandas提供兩個經常使用的數據類型:
• Series
• DataFrame函數

In [1]:
import pandas as pd 大數據

2.Series類型
Series類型相似於Numpy的一維數組對象,能夠將該類型看作是一組數據與數據相關的標籤(索引)聯合而構成(帶有標籤的一維數組對象)。
1.建立方式
Series經常使用的建立(初始化)方式:
• 列表等可迭代對象
• ndarray數組對象
• 字典對象
• 標量對象

In [3]:索引

1. 使用列表建立series

s=pd.Series([1,2,3])

左邊的0 1 2 位置標籤 key

print(s,type(s))

2.使用字典來建立,能夠直接使用字典類型指定每一個元素的標籤

s=pd.Series({"a":10,"b":20,"c":30})
print(s)ip

a 10
b 20
c 30
dtype: int64內存

2.相關屬性
• index
• values
• shape
• size
• dtype
Series對象能夠經過index與values訪問索引與值。其中,咱們也能夠經過修改index屬性來修改Series的索引。說明:
• 若是沒有指定索引,則會自動生成從0開始的整數值索引,也可使用index顯式指定索引。
• 當數值較多時,能夠經過head與tail訪問前 / 後N個數據。
• Series對象的數據只能是一維數組類型。數據分析

In [10]:pandas

index屬性 建立了series的時候,每一個元素的標籤,就是index

若是建立的時候,沒有指定index屬性,使用0 1 2....位置索引來充當index

若是指定了index,使用指定的值來充當表標籤

s=pd.Series([1,2,3],index=["a","b","c"])

索引能不能用整數來充當呢?能夠,可是不建議這樣使用

s=pd.Series([1,2,3],index=[2,3,4])pip

s

s[2]

print(s.shape) # size都是用來顯示series中有多少個元素的

(3,)

3.Series相關操做
Series在操做上,與Numpy數據具備以下的類似性:
• 支持廣播與矢量化運算。
• 支持索引與切片。
• 支持整數數組與布爾數組提取元素。
1.運算
Series類型也支持矢量化運算與廣播操做。計算規則與Numpy數組的規則相同。同時,Numpy的一些函數,也適用於Series類型,例如,np.mean,np.sum等。
多個Series運算時,會根據索引進行對齊。當索引沒法匹配時,結果值爲NaN(缺失值)。說明:
• 咱們能夠經過pandas或Series的isnull與notnull來判斷數據是否缺失。
• 除了運算符之外,咱們也可使用Series對象提供的相關方法進行運算【能夠指定缺失的填充值】。
• 儘管Numpy的一些函數,也適用於Series類型,但Series與ndarray數組對於空值NaN的計算處理方式上是不一樣的。【Numpy的計算,會獲得NaN,而Series會忽略NaN】

In [12]:

s1=pd.Series([1,2,3])

s2=pd.Series([10,20,30])

s1+1

s1+s2

Out[12]:
0 11
1 22
2 33
dtype: int64

2.索引
標籤索引與位置索引
若是Series對象的index值爲非數值類型,經過[索引]訪問元素,索引既能夠是標籤索引,也能夠是位置索引。這會在必定程度上形成混淆。咱們能夠經過:
• loc 僅經過標籤索引訪問。
• iloc 僅經過位置索引訪問。
這樣,就能夠更加具備針對性去訪問元素。
整數數組索引與布爾數組索引
Series也支持使用整數數組與布爾數組進行索引。與Numpy數組相同,兩者返回的是原數組數據的拷貝(複製)。
說明:
• 與ndarray數組的整數索引不太相同,Series的整數數組索引,既能夠是標籤數組索引,也能夠是位置數組索引。

In [30]:

s=pd.Series([1,2,3],index=[10,20,30])

s[index]

s[0]

s[10]

不建議直接使用s[index] index多是位置標籤,也多是名字標籤

若是一個series有了index標籤,位置索引失效。

爲了使用位置索引和標籤索引清晰,series單獨提供了,標籤索引方式和位置索引方式

loc 僅經過標籤索引訪問。

iloc 僅僅經過位置進行訪問

s=pd.Series([1,2,3],index=[10,20,30])

s.loc[10]

s.iloc[0]

s.ix[index] 老版本 先以標籤優先查找,若是標籤沒找到,則按照位置 不建議使用。

series可使用整數數組做爲索引,用來提取多個元素(跟numpy一致)

s.iloc[0],s.iloc[1]
li_index=[0,1]
s.iloc[li_index]
li_keys=[10,20]
s.loc[li_keys]

series可使用布爾數組做爲索引,s[布爾數組],能夠將true對應的元素留下,其他去掉

使用的時候,與或非的規則跟numpy一致

s[[True,False,False]]
s=pd.Series(range(20))
s_b=s>10
s[s_b]

Out[30]:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
dtype: int64

3.切片
Series也支持切片訪問一個區間的元素。與Numpy的數組相同,切片返回的是原數組數據的視圖。
In [38]:
s=pd.Series(range(20),index=range(100,120))
s

切片獲取的時候,也依然聽從索引獲取方式,分紅按照位置進行切片和按照標籤進行切片

loc切片,則按照標籤名切 包含start,也包含end

iloc切片,則按照位置進行切 包含start,不包含end

s.iloc[5:10]
s.loc[104:109]

s=pd.Series(range(5),index=["a","b","c","d","e"])
s.loc["d"]
s.loc["b":"d"]

Out[38]:
b 1
c 2
d 3
dtype: int64

4.Series的CRUD
Series索引-數值CRUD操做:
• 獲取值
• 修改值
• 增長索引-值
• 刪除索引-值

In [48]:
s=pd.Series(range(5),index=["a","b","c","d","e"])

(1)獲取元素

iloc或者loc

(2)增長

s.loc["f"]=5

(3)修改

s.loc["f"]=50
s

(4)刪除

s.drop(標籤)

inplace :false默認,表明是否進行原地修改。

效率特別重要,原地操做不須要佔用額外的內存。若是源數據對後期使用不大,能夠進行原地操做,來節省內存。inplace設置成True

s.drop("a")

s.drop("a",inplace=True)
s

Out[48]:
b 1
c 2
d 3
e 4
f 50
dtype: int64

將請期待下一篇——Pandas經常使用的兩種數據類型之「DataFrame」
若是你以爲文章還不錯,請你們點贊分享下。你的確定是我最大的鼓勵和支持。
▼更多幹貨分享,詳情請關注公衆號Python爬蟲與大數據分析呀!▼

相關文章
相關標籤/搜索