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 的相關操作,稍微總結一下:
- Series 的創建方法
- Series 的訪問操作
- Series 的相關運算
今天文章內容就這些,有問題歡迎留言,下節見
寫在後面的話
如果說你錯過了上個系列,那你一定不能錯過這個系列
數據分析乾貨也不多,這個系列完了可能就會開始實戰了
沒跟上的同學自己加快進度,跟上的同學記得關注我,下節內容就不會錯過了。
碎碎念一下
新的系列,小一我一直在努力,你們也要加油
感謝每篇文章幫我點讚的你
原創不易,歡迎點贊噢
文章首發:公衆號【知秋小一】
文章同步:掘金,簡書,csdn