標籤:

玩轉Pandas,讓數據處理更easy系列1

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

微信群: gz113097485

QQ交流群:646901659

1Series對象介紹

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]

這樣,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中是允許出現重複的索引標籤的。

2.3.2 刪除

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

s3.drop(A)

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

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

2.3.3 修改

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

s3[B] = 6

或者,

s3[1] = 6

2.3.4 查找

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

3DataFrame

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

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

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

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

3.1 裝載Series

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

pd_data.append(s3)

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

pd_data.columns = list(ABC)

pd_data.append(s3)

插播:

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

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

如需下載以上代碼,請後台回復: pandas1

更多文章:

NLP入門:CNN,RNN應用文本分類,個性化搜索,蘋果和喬布斯關係抽取(2)

深度學習|大師之作,必是精品

演算法channel關鍵詞和文章索引

演算法優化|說說哨兵(sentinel value)

Numpy|需要信手拈來的功能

演算法channel ∣全原創乾貨分享

99%是工程與學術相結合的原創乾貨和筆記,從基礎演算法,到機器學習,深度學習,NLP,再到工程級的工具庫使用等10餘個頻道,如果你是演算法愛好者,對人工智慧感興趣,加入這裡!

推薦閱讀:

ImagePy教程 —— 直方圖調整
numpy和pandas入門
將數組以二進位格式保存到磁碟
Matlab user 轉 Python 筆記(1):初遇Numpy
學習numpy庫

TAG:Python | numpy |