當前位置:
首頁 > 最新 > 利用Python進行數據分析之數據規整化

利用Python進行數據分析之數據規整化

像我這樣的人

 2017閱文超級IP風雲盛典

毛不易 

00:00/02:49

數據規整化

重塑和軸向旋轉

對表格型數據重新排列。

重塑層次化索引

stack:將數據的列「旋轉」為行。

unstack:將數據的行「旋轉」為列。

data.stack()結果如下:為一個Series

反過來就是用unstack()

將「長格式」旋轉為「寬格式」

長格式為全部列像關係型資料庫(如MySQL)存儲,固定架構,後續增加數據或者刪除,數據只會越來越長。但是缺點是數據操作不方便。因為都是一行做一個數據,看上去數據就特別多,但是如果將一個作為索引,就能減少一定量的數據級,但是數據量並沒減少。

數據轉換

前面提到的是對數據進行重排,另一類重要操作則是過濾、清理以及其他的

轉換工作。

移除重複操作

DataFrame中出現了重複行時:

利用函數或映射進行數據轉換

假設一個data如下:

如果想添加一列表明該food來源的動物類型,需要先編寫一個肉類到動物的映射:

如何增加上去,注意到有的肉類有大寫,str.lower為一個函數,可以放在Series的map方法中,再把映射也可以放進來:

而使用lambda則更簡潔:

替換值

之前處理缺失時,使用fillna方法填充可以看作是一種特殊情況,前面的map當然也可以用來替換,但是replace是一種更方便靈活的方法。

重命名軸索引

對軸索引重新命名,也可以使用map來傳入一個函數等操作

如果想創建數據集的轉換版而不是修改原始數據,則可以使用rename:

rename不是修改源數據,如果想直接修改,在rename內直接傳入inplace=True即可。

離散化和面元劃分

我的理解就是對一組數據劃分到不同的組內:

假設有一組人員數據,而你希望將它們劃分為不同的年齡組。

接下來將這些數據劃分為「18到25"、"26到35"、"35到60』以及「60以上』幾個面元。要實現該功能.需要使用panda的cut函數:

實際上是先定義一個labels指明每個值分別位於哪個區間(labels),然後對區間進行替換顯示(levels)

默認區間為左開右閉,可以通過

來修改為左閉右開。這個labels負責最後的顯示,所以

如果傳入面元數量(分組數量),則會根據數據最小值和最大值計算等長面元。

qcut是類似cut的函數,但是qcut是使用的樣本分位數,所以得到大小基本相等的面元。即每個面元,每個分組的數據數量基本相同。即將數據均勻撒在四個分組中。

檢測和過濾異常值

排列和隨機採樣

計算指標/啞變數

DataFrame的某一列中含有k個不同的值,則可以派生出一個k列矩陣或DataFrame(其值全為1和0) .pandas有一個get _dummies函數可以實現該功能。

DataFrame列加上一個前綴,abc即變為key_a,key_b,key_c

字元串操作

Python能夠成為流行的數據處理語言,部分原因是其簡單易用的字元申和文本處理功能。大部分文本運算都直接做成了字元串對象的內置方法。對於更為複雜的模式匹配和

文本操作。則可能需要用到正則表達式。pandas對此進行了加強。它使你能夠對整組數據應用字元串表達式和正則表達式.而且能處理煩人的缺失數據。

字元串對象方法

split,strip等這些內置的字元串方法已經滿足來了大部分要求。

利用加法,可以將這些子字元串以雙冒號分隔符的形式連接起來:

但是python則可以直接:

等等,其他內置方法不再贅述。使用時百度查表即可。

正則表達式

正則表達式覺得是一種很高級簡潔的方法,且其他地方用的也很多,如果不了解,建議搜索查看一遍,有所印象。掌握常用的一些用法。

pandas中矢量化的字元串函數

通過data.map,所有字元串和正則表達式方法都能被應用於(傳人lambda表達式或其他函數)各個值,但是如果存在NA就會報錯。為了解決這個問題.Series有一些能夠跳過NA值的字元串操作方法。通過Series的str屬性即可訪問這些方法。例如,我們可以通過str.contains檢查各個電子郵件地址是否含有「gmail":

有兩個辦法可以實現矢量化的元素獲取操作:要麼使用str.get,要麼在str屬性上使用

索引。

矢量化的字元串方法如下:

總結

數據規整化到這章結束,下一步就是數據可視化。

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

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


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

Python知識點匯總函數例子+模塊使用
除了畫顆「心」,一行Python代碼還能幹些啥?

TAG:Python |