當前位置:
首頁 > 最新 > 開始Python的數據結構

開始Python的數據結構

本文是《如何七周成為數據分析師》的第十九篇教程,相關視頻教程【秦路主講,七周成為數據分析師】如果想要了解寫作初衷,可以先行閱讀七周指南。溫馨提示:如果您已經熟悉Python,大可不必再看這篇文章,或只挑選部分。

Python一共有三大數據結構,它是Python進行數據分析的基礎,分別是tuple元組,list數組以及dict字典。本文通過這三者的學習,打下數據分析的基礎。

數組

數組是一個有序的集合,他用方括弧表示。

num就是一個典型的數組。數組不限定其中的數據類型,可以是整數也可以是字元串,或者是混合型。

數組可以直接用特定的函數,函數名和Excel相近。

sum是求和,len則是統計數組中的元素個數。

上述列舉的函數是數組內整體元素的應用,如果我只想針對單一的元素呢?比如查找,這裡就要用到數組的特性,索引。索引和SQL中的索引差不多,都是用來指示數據所在位置的邏輯指針。數組的索引便是元素所在的序列位置。

注意,索引位置是從0開始算起,這是編程語言的默認特色了。num[0]指數組的第一個元素,num[1]指數組的第二個元素。

我們用len()計算出了數組元素個數是5,那麼它最後一個元素的索引是4。若是數組內的元素特別多呢?此時查找數組最後一位的元素會有點麻煩。Python有一個簡易的方法,可以用負數表示,意為從最後一個數字計算索引。

這裡的num[4]等價於num[-1],num[-2]則指倒數第二個的元素。

再來一個新問題,如何一次性選擇多個元素?例如篩選出數組前三個元素。在Python中,用:表示範圍。

num[0:3]篩選了前三個元素,方括弧左邊是閉區間,右邊是開區間,所以這裡是num[0],num[1]和num[2],並不包含num[3]。這個方法叫做切片。

上述是索引的特殊用法,[0:]表示從第0個索引開始,直到最後一個元素。[:3]表示從第一個元素開始,直到第3個索引。

負數當然也有特殊用法。[-1:]表示從最後一個元素開始,因為它已經是最後一個元素了,所以只返回它本身。[:-1]表示從第一個元素開始到最後一個元素。num[-2:-1]和num[-3:-1]大同小異。

數組的增刪查

我們已經了解數組的基本概念,不過仍舊停留在查找,它不涉及數據的變化。工作中,更多需要操縱數組,對數組的元素進行添加,刪除,更改。

數組通過insert函數插入,函數的第一個參數表示插入的索引位置,第二個表示插入的值。

另外一種方式是append,直接在數組末尾添加上元素。它在之後講到迭代和循環時應用較多。

如果要刪除特定位置的元素,用pop函數。如果函數沒有選擇數值,默認刪除最後一個元素,如果有,則刪除數值對應索引的元素。

更改元素不需要用到函數,直接選取元素重新賦值即可。

到這裡,數組增刪改查已經講完,但這只是一維數組,一維數組之上還有多維數組。如果現在有一份數據是關於學生信息,一共有三個學生,要求包含學生的姓名,年齡,和性別,應該怎麼用數組表示呢?

有兩種思路,一種是用三個一維數組分別表示學生的姓名,年齡和性別。

學生屬性被拆分成多個數組,利用索引來表示其信息,這裡的索引有些類似SQL的主鍵,通過索引查找到信息。但是這種方法並不直觀,實際應用會比較麻煩,更好的方法是表示成多維數組。

所謂多維數組,是數組內再嵌套數組,圖中表示的是一個寬度為3,高度為3的二維數組。此時student[0]返回的是數組而不是單一值。這種方法將學生信息合併在一起,比第一個案例更容易使用。

如果想選擇第一個學生的性別,應該怎麼辦呢?很簡單,後面再加一個索引即可。

現在嘗試快速創建一個多維數組。

[0]*3將快速生成3個元素值為0的數組,這是一種快捷操作,而[row]*4則將其擴展成二維數據,因為是4,所以是3*4的結構。

這裡有一個注意點,當我們想更改多維數組中的某一個元素而不是數組時,這種方式會錯誤。

按照正常的想法,martix[1][0]將會改變第二個數組中的第一個值為1,但是結果是所有數組的第一個值都變成1。這是因為在matrix = [row] * 4操作中,只是創建3個指向row的引用,可以簡單理解成四個數組是一體的。一旦其中一個改變,所有的都會變。

比較穩妥的方式是直接定義多維數組,或者用循環間接定義。多維數組是一個挺重要的概念,它也能直接表示成矩陣,是後續很多演算法和分析的基礎(不過在pandas中,它是另外一種形式了)。

元組

tuple叫做元組,它和數組非常相似,不過用圓括弧表示。但是它最大的特點是不能修改。

當我們想要修改時就會報錯。

而選擇和數組沒有差異。

元組可以作為簡化版的數組,因為它不可更改的特性,很多時候可以作為常量使用,防止被篡改。這樣會更安全。

字典

字典dict全稱dictionary,以鍵值對key-value的形式存儲。所謂鍵值,就是將key作為索引存儲。用大括弧表示。

圖中的 qinlu 是key,18是value值。key是唯一的,value可以對應各種數據類型。key-value的原理不妨想像成查找字典,拼音是key,對應的文字是value(當然字典的拼音不唯一)。

字典和數組的差異在於,因為字典以key的形式存儲和查找,所以它的查詢速度非常快,畢竟翻字典的時候你只要知道拼音就能快速定位了。對dict數據結構,10條記錄和10萬條記錄的查找沒有區別。

這種查找方式的缺點是佔用內存大。數組則相反,查找速度隨著元素的增加逐漸下降,這個過程想像成程序在一頁頁的翻一本沒有拼音的字典,直到找到內容。數組的優點是佔用的內存空間小。

所以數組和字典的優缺點相反,dict是空間換時間,list是時間換空間,這是編程中一個比較重要的概念。實際中,數據分析師的工作不太涉及工程化,選用數組或者字典沒有太嚴苛的限制。

細心的讀者可能已經發現,字典定義時我的輸入順序是qinlu,lulu,qinqin,而列印出來是lulu,qinlu,qinqin,順序變了。這是因為定義時key的順序和放在內存的key順序沒有關係,key-value通過hash演算法互相確定,甚至不同Python版本的哈希演算法也不同。這一點應用中要避免出錯。

既然字典通過key-value對匹配查找,那麼它自然不能不用數組的數值索引,它只能通過key值。

如果key不存在,會報錯。

通過in方法,可以返回True或False,避免報錯

dict和list一樣,直接通過賦值更改value。

能不能更改key的名字?不能,key一旦確定,就無法再修改,好比字典定好後,你能修改字的拼音么?

dict中刪除key和list一樣,通過pop函數。增加key則是直接賦予一個新的鍵值對。

dict的keys和values兩個函數直接輸出所有的key值和value值。如果要轉換成數組,則再外面嵌套一個list函數。

items函數,將key-value對變成tuple形式,以數組的方式輸出。

字典可以通過嵌套應用更複雜的數據格式,和NoSQL與JSON差不多。

基礎的數據類型差不多了,更多函數應用大家網上自行查閱文檔,這塊掌握了,在數據清洗過程中將會非常高效,尤其是讀取Excel數據時。當然不要求滾瓜爛熟,因為後面將學習更加強大的Numpy和Pandas。

天善智能年度數據分析扛鼎之作,秦路主講,七周成為數據分析師課程。

關鍵字:已有 1300+ 人學習 數據分析思維、業務、Excel、數據可視化、MySQL、統計學、Python

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

一個不簡單的非同步爬蟲小程序
記,用Python分析農藥,打出了一次超6的團戰!
Python必學基礎概念
python最牛web框架居然是「它」
十張圖讀懂 PHP、Python、Ruby 三大語言的差異

TAG:Python |