05.23 「乾貨教程」Pandas入門課程系列1「強烈推薦」

「乾貨教程」Pandas入門課程系列1「強烈推薦」

做算法工作的都知道,沒有數據怎麼玩? 軟件工程,機器學習,深度學習,算法工程師,清洗、分析數據Pandas那是一利器,熟練準確地使用Pandas,會使你應對工作更輕鬆自如,讓你少熬夜加班。本文根據近期工作使用Pandas的心得體會,總結下Pandas的框架結構和常用的API,書寫思路按照使用Pandas的邏輯結構,分享給大家。

1

Series對象介紹

Series 是pandas兩大數據結構中(DataFrame,Series)的一種,我們先從Series的定義說起,Series是一種類似於一維數組的對象,它由一組數據(各種NumPy數據類型)以及一組與之相關的數據標籤(即索引)組成。

Series對象本質上是一個NumPy的數組,因此NumPy的數組處理函數可以直接對Series進行處理。但是Series除了可以使用位置作為下標存取元素之外,還可以使用標籤下標存取元素,這一點和字典相似,每個Series對象都由兩個數組組成:

1) index: 它是從NumPy數組繼承的Index對象,保存標籤信息。

2) values: 保存值的NumPy數組。

瞭解Series的這種數據結構,對於接下來使用Series至關重要。

2

靈活使用Series

這部分的總結思路如下:

  1. 如何創建Series;
  2. Series索引;
  3. Series的增刪改查

2.1 創建Series

創建Series,直接調用Series的構造函數,如下:

#只指定values

s1 = pd.Series( [3,5,7])

#還指定index

s2 = pd.Series( [3,5,7], index = list('ABC') )

#再指定name

s3 = pd.Series( [3,5,7], index = list('ABC'),name='s3' ) #指定name的作用:append到pd中的行索引標籤

  • 單獨說明一點:
  • Series的元素類型可以是不同的,比如:

mix = pd.Series( [3, '5', 7.0] ) # 此時的mix的類型為object,而不是像上面的int64

2.2 Series索引

創建Series時,如果不指定index,默認索引從0開始。如果創建完Series後,想修改索引,可以這樣:

s1.index = ['a', 'b', 'c']

「乾貨教程」Pandas入門課程系列1「強烈推薦」

這樣,s1的索引變為從'a'開始。

2.3 Series增刪改查

2.3.1增加

Series的增加有兩個類似的API,但是不要混淆了啊,一個是add,它的效果是元素對應相加,另一個是append,才是將元素拼接到原series後。

s3.add(s2)

元素的個數還是3個,只不過元素大小變為[6,10,14],注意如果索引不相同的add,會增加元素個數,但是所有元素都變為Nan

那append的呢?

s3.append(s2) #元素個數變為6個,並且索引可以允許重複,記住pandas中是允許出現重複的索引標籤的。

「乾貨教程」Pandas入門課程系列1「強烈推薦」

2.3.2 刪除

如何刪除series的一個元素呢,調用drop,接口中傳入一個索引標籤。

s3.drop('A')

「乾貨教程」Pandas入門課程系列1「強烈推薦」

刪除後如果再想恢復怎麼辦呢?因為series的index是一個list,所以先添加一個pd.Index()實例,然後再充填上值就行:

s3.index.append(pd.Index(['A']) )

2.3.3 修改

想修改某個元素,直接找到對應的標籤(按照字典的方式),或找到對應的values的索引,

s3['B'] = 6

「乾貨教程」Pandas入門課程系列1「強烈推薦」

或者,

s3[1] = 6

2.3.4 查找

查找某個元素,可以通過標籤或索引,見如上的修改方法,不再詳述。

3

DataFrame

DataFrame是pandas的兩個重要數據結構的另一個,可以看做是Series的容器,看早一個DataFrame實例的方法也很簡單:

pd_data = pd.DataFrame([ [9,0,1],[7,3,10] ] )

「乾貨教程」Pandas入門課程系列1「強烈推薦」

這種方法默認下行索引標籤和列索引標籤都是從0開始。注意這是DataFrame的重要特性之一,同時具有行列標籤,如果Series是一維的數組,那麼作為其容器的DataFrame自然是二維的數組,其中行的axis=0, 列的axis=1.

既然DataFrame和Series如此緊密,那麼它們之間又是如何通信的呢? 下面看下如何將一個Series轉載到一個DataFrame的實例中。

3.1 裝載Series

先看一個沒達到預期的裝載,我們想把s3裝載到pd_data中,調用append,API調對了,但是錯誤的是它們的索引不對應,所以:

pd_data.append(s3)

「乾貨教程」Pandas入門課程系列1「強烈推薦」

因此,以上的DataFrame實例pd_data,修改其columns與s3對應,

pd_data.columns = list('ABC')

pd_data.append(s3)

「乾貨教程」Pandas入門課程系列1「強烈推薦」

插播:

  • 上面也涉及到DataFrame的行列標籤屬性設置,分別為index, columns,可以先創建後設置標籤,如上所示。
  • 可以觀察到s3的name變為了加入後的行標籤

以上,pandas的兩種最重要的數據結構,弄明白了其原理,用起來便能順手些,如有疏漏或錯誤,請指針。


分享到:


相關文章: