《愛上潘大師》系列 | Series其實很簡單



2020,努力做一個無可替代的人!



寫在前面的話

如果你是因爲標題點進來的,那我得先解釋一下

小一我可不是渣男,怎麼會愛上別的人呢

Pandas,江湖人稱“潘大師”,一手數據分析的技能讓江湖人士愛慕不已。

當然,小一我也是潘大師的忠實粉絲,在MB級別的數據處理中也全靠潘大師才能夠苟活到現在。

《愛上潘大師》系列,是Python 高階部分的第二個系列

上一個系列也說過,NumPy 是Pandas 的基礎,如果Pandas 有些問題你不是很理解,就去上一個系列看看基礎,想必會對你有所幫助

上一個系列我根據文章主要內容重新列了標題

不要問我爲什麼重新列標題,我的眼眶好像又溼了…

NumPy 系列四篇文章,打好基礎,再去研究Pandas 就會容易很多:

推薦看完《Hello NumPy》系列再來開荒 《Pandas 系列》


正文

Pandas,數據分析的重點庫,基於NumPy構建,包含數據分析的高級數據結構和操作工具。

上面三個介紹應該很能說明問題,如果說NumPy 是一塊生鐵,那Pandas 就是一把生鐵打造的利刃。

瞭解Pandas ,就得先了解它的數據結構。

不同於NumPy 的多維數組,Pandas 的主要數據結構是Series和DataFrame。

Series是一種類似於一維數組的對象,而DataFrame是一個表格型的數據結構,今天就主要介紹一下Series 相關。


Series 到底是什麼樣的?

Series 由一組數據以及一組與之相關的數據標籤組成,其中數據可以是NumPy類型的各種數據,數據標籤我們稱之爲索引。

說這麼些,還不如直接舉個例子,包你一眼就看明白

import pandas as pd
# 創建 Series
series_data1 = pd.Series([1, 2, 4, 5])

# 輸出
0    1
1    2
2    4
3    5
dtype: int64

Series 是Pandas 的一種數據結構,所有我們可以直接通過 pd. 調用它

上面例子中,通過一維數組創建一個Series 數據,其中索引在左邊,值在右邊。

即左邊的【0、1、2、3】是數據的索引,右邊的【1、2、4、5】是數據值。

雖然我們沒有爲數據指定索引,但是Series 會自動創建一個0到N-1的整數型索引。


帶索引的數據Series 數據如何創建?

知道你也有這個疑問,一起看一下吧

在創建的數據的時候,我們需要手動聲明索引

# 創建帶索引的數據
series_data2 = pd.Series([1, 2, 4, 5], index=['a', 'b', 'c', 'd'])

# 輸出
a    1
b    2
c    4
d    5
dtype: int64

這就是Series 創建的方法,是不是很簡單?


就這兩種創建方式嗎?NumPy 可是有好多種

有的有的,還可以通過字典創建 Series

# 通過字典創建Series
dict_data = {'a':1, 'b':2, 'c':4, 'd':5}
series_data3 = pd.Series(dict_data)

# 輸出
a    1
b    2
c    4
d    5
dtype: int64

也可以通過字典和索引結合的方式創建 Series

這個時候,就以索引對應的數據爲主了:索引能對應上數據,則數據存在,否則,數據爲NaN

# 根據索引對應取值
index_data = ['a', 'b', 'c', 'new']
series_data4 = pd.Series(dict_data, index=index_data)

# 輸出
a      1.0
b      2.0
c      4.0
new    NaN
dtype: float64

Series 的創建就這幾種,一般創建 Series用到的不多,瞭解瞭解


Series 數據創建好了,訪問的時候需要注意什麼嗎?

首先既然我們要訪問數據,得先知道都有哪些訪問方式

比如我們需要知道所有的值和索引,可以這樣寫

# 獲取數據值
series_data2.values
# 輸出
[1 2 4 5]

# 獲取索引對象
series_data2.index
# 輸出
Index(['a', 'b', 'c', 'd'], dtype='object')

既然可以訪問索引,那索引可以修改嗎?

對不起,不可以。

Index 對象不能更改,但是可以通過賦值索引實現這個目的

# 賦值索引
series_data2.index = ['new_a', 'new_b', 'new_c', 'new_d']
# 輸出
Index(['new_a', 'new_b', 'new_c', 'new_d'], dtype='object')

至於說Series 的reindex 方法,先賣個關子,下節會說


通過下標去訪問

例如我們需要查看第三個數據值以及對應的索引

# 查看第三個數據值
series_data2[2]
# 輸出
4

# 查看第三個數據值對應的索引
series_data2.index[2]
# 輸出
new_c

瞭解了,還有其他訪問方式嗎?

如果我們知道索引,當然也可以通過索引訪問數據

# 通過索引訪問數據
series_data2['new_c']
# 輸出
4

# 通過多個索引訪問數據
series_data2[['new_a', 'new_b', 'new_c']]
# 輸出
new_a    1
new_b    2
new_c    4
dtype: int64

瞭解了訪問方式,回想一下NumPy,Series之間可以進行相應的計算嗎?

答案是肯定的。


先來看看 Series 的邏輯運算

# 輸出大於2的Series 數據
series_data2[series_data2>2]

# 輸出
new_c    4
new_d    5
dtype: int64

# c是否在索引中
'c' in series_data2
# 輸出(因爲已經改成 new_c了,所以是False)
False

在進行 in 運算時,可以將 Series看作是一個字典數據類型,索引和值是一一對應的。


再來看看 Series 的算術運算

舉個例子:平方運算和開方運算

series_data2**2
# 輸出
new_a     1
new_b     4
new_c    16
new_d    25
dtype: int64

np.sqrt(series_data2)
# 輸出
new_a    1.000000
new_b    1.414214
new_c    2.000000
new_d    2.236068
dtype: float64

Series 還有一個最重要的功能:自動對齊

Series 會自動對齊不同索引的數據,特別是在算術運算符中

看個例子:不同索引的兩個Series 數據相加

# 創建不同索引的兩個Series
series_a = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
series_b = pd.Series([2, 2, 2], index=['b', 'c', 'd'])

# 輸出
a    1
b    2
c    3
dtype: int64
b    2
c    2
d    2
dtype: int64
    
# 相加
series_a + series_b
# 輸出
a    NaN
b    4.0
c    5.0
d    NaN
dtype: float64

Series 會根據索引自動對齊數據,上面例子中兩個Series 自動對齊 b、c 索引的數據 ,若無法對齊則會置爲缺失數據

NaN:not a number 非數字


總結一下:

今天主要介紹了Pandas 的部分背景和Series 相關操作。

可能也不是很會寫那種概念文,所以背景也就一兩句話略過,大家就權當我說了很多,記住一點:NumPy 是基礎,Pandas 是利器。

文中主要介紹了Series 的相關操作,稍微總結一下:

  1. Series 的創建方法
  2. Series 的訪問操作
  3. Series 的相關運算

今天文章內容就這些,有問題歡迎留言,下節見

寫在後面的話

如果說你錯過了上個系列,那你一定不能錯過這個系列

數據分析乾貨也不多,這個系列完了可能就會開始實戰了

沒跟上的同學自己加快進度,跟上的同學記得關注我,下節內容就不會錯過了。

碎碎念一下

新的系列,小一我一直在努力,你們也要加油

感謝每篇文章幫我點讚的你


原創不易,歡迎點贊噢

文章首發:公衆號【知秋小一】

文章同步:掘金,簡書,csdn


原文鏈接:《愛上潘大師》系列-與Series的初次相見


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章