第4章 精通pandas變形操作

2021-01-11 酷扯兒

本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫

文章目錄

第4章 變形一、透視表1. pivot2. pivot_table3. crosstab(交叉表)二、其他變形方法1. melt2. 壓縮與展開三、啞變量與因子化1. Dummy Variable(啞變量)2. factorize方法第4章 變形

import numpy as npimport pandas as pddf = pd.read_csv('data/table.csv')df

一、透視表

1. pivot

一般狀態下,數據在DataFrame會以壓縮(stacked)狀態存放,例如上面的Gender,兩個類別被疊在一列中,pivot函數可將某一列作為新的cols:

df.pivot(index='ID',columns='Gender',values='Height').head()

然而pivot函數具有很強的局限性,除了功能上較少之外,還不允許values中出現重複的行列索引對(pair),例如下面的語句就會報錯:

# df.pivot(index='School',columns='Gender',values='Height').head()

因此,更多的時候會選擇使用強大的pivot_table函數

2. pivot_table

首先,再現上面的操作:

pd.pivot_table(df,index='ID',columns='Gender',values='Height').head()

由於功能更多,速度上自然是比不上原來的pivot函數:

%timeit df.pivot(index='ID',columns='Gender',values='Height')%timeit pd.pivot_table(df,index='ID',columns='Gender',values='Height')

Pandas中提供了各種選項,下面介紹常用參數:

① aggfunc:對組內進行聚合統計,可傳入各類函數,默認為’mean』

pd.pivot_table(df,index='School',columns='Gender',values='Height',aggfunc=['mean','sum']).head()

②margins:匯總邊際狀態

pd.pivot_table(df,index='School',columns='Gender',values='Height',aggfunc=['mean','sum'],margins=True).head()#margins_name可以設置名字,默認為'All

③ 行、列、值都可以為多級

pd.pivot_table(df,index=['School','Class'],columns=['Gender','Address'], values=['Height','Weight'])

3. crosstab(交叉表)

交叉表是一種特殊的透視表,典型的用途如分組統計,如現在想要統計關於街道和性別分組的頻數:

pd.crosstab(index=df['Address'],columns=df['Gender'])

交叉表的功能也很強大(但目前還不支持多級分組),下面說明一些重要參數:

① values和aggfunc:分組對某些數據進行聚合操作,這兩個參數必須成對出現

pd.crosstab(index=df['Address'],columns=df['Gender'],values=np.random.randint(1,20,df.shape[0]),aggfunc='min')#默認參數等於如下方法:#pd.crosstab(index=df['Address'],columns=df['Gender'],values=1,aggfunc='count')

②除了邊際參數margins外,還引入了normalize參數,可選』all』,『index』,'columns』參數值

pd.crosstab(index=df['Address'],columns=df['Gender'],normalize='all',margins=True)

二、其他變形方法

1. melt

melt函數可以認為是pivot函數的逆操作,將unstacked狀態的數據,壓縮成stacked,使「寬」的DataFrame變「窄」

df_m = df[['ID','Gender','Math']]df_m.head()

df.pivot(index='ID',columns='Gender',values='Math').head()

melt函數中的id_vars表示需要保留的列,value_vars表示需要stack的一組列

pivoted = df.pivot(index='ID',columns='Gender',values='Math')result = pivoted.reset_index().melt(id_vars=['ID'],value_vars=['F','M'],value_name='Math')\.dropna().set_index('ID').sort_index()#檢驗是否與展開前的df相同,可以分別將這些鏈式方法的中間步驟展開,看看是什麼結果result.equals(df_m.set_index('ID'))# result

2. 壓縮與展開

(1)stack:這是最基礎的變形函數,總共只有兩個參數:level和dropna

df_s = pd.pivot_table(df,index=['Class','ID'],columns='Gender',values=['Height','Weight'])df_s.groupby('Class').head(2)

df_stacked = df_s.stack()df_stacked.groupby('Class').head(2)

stack函數可以看做將橫向的索引放到縱向,因此功能類似與melt,參數level可指定變化的列索引是哪一層(或哪幾層,需要列表)

df_stacked = df_s.stack(0)df_stacked.groupby('Class').head(2)

(2)unstack:stack的逆函數,功能上類似於pivot_table

df_stacked.head()

result = df_stacked.unstack().swaplevel(1,0,axis=1).sort_index(axis=1)result.equals(df_s)#同樣在unstack中可以指定level參數

三、啞變量與因子化

1. Dummy Variable(啞變量)

這裡主要介紹get_dummies函數,其功能主要是進行one-hot編碼:

df_d = df[['Class','Gender','Weight']]df_d.head()

pd.get_dummies(df_d[['Class','Gender']]).join(df_d['Weight']).head()#可選prefix參數添加前綴,prefix_sep添加分隔符

2. factorize方法

該方法主要用於自然數編碼,並且缺失值會被記做-1,其中sort參數表示是否排序後賦值

codes, uniques = pd.factorize(['b', None, 'a', 'c', 'b'], sort=True)display(codes)display(uniques)

相關焦點

  • 第5章 精通pandas合併操作(使用pandas進行數據分析,)
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫文章目錄第5章 合併一、append與assign1. append方法2. assign方法二、combine與update1. comine方法2. update方法三、concat方法四、merge與join1. merge函數
  • pandas指南:做更高效的數據科學家
    skiprows=[2,5]表示在讀取文件時將刪除第2行和第5行最常用的函數:read_csv, read_excel還有一些很不錯的函數:read_clipboard、read_sql2、寫入數據index=None將簡單地按原樣寫入數據。如果你不寫index=None,會得到額外的行。
  • pandas向量化字符串操作方法!
    那麼,有沒有辦法,不用循環就能同時處理多個字符串呢,pandas的向量化操作就提供了這樣的方法。向量化的操作使我們不必擔心數組的長度和維度,只需要關係操作功能,尤為強大的是,除了支持常用的字符串操作方法,還集成了正則表達式的大部分功能,這使得pandas在處理字符串列時,具有非常大的魔力。
  • PANDAS: 新手教程 一
    它可以幫助你對數據進行各種操作,並生成有關它的不同報告。我將把這篇文章分成兩篇基本知識-我將在這個故事中介紹。我將介紹Pandas的基本功能,這些功能將使你大致了解如何開始使用Pandas,以及它如何幫助你節省大量時間。高級-將通過高級的功能,使它更容易解決複雜的分析問題。它將涵蓋的主題,如風格,繪圖,讀取多個文件等。第二部分仍在進行中,敬請期待。
  • 第8章 pandas分類數據(初學者必學)
    文章目錄第8章 分類數據一、category的創建及其性質1. 分類變量的創建2. 分類變量的結構(b)categories和ordered屬性3. 類別的修改二、分類變量的排序1. 序的建立2. 排序三、分類變量的比較操作1. 與標量或等長序列的比較2.
  • 【跟著stackoverflow學Pandas】- Pandas修改列的類型
    ,一般需要進行數據類型的轉化,這篇文章就介紹pandas裡面的數據類型及轉換。3列數據,col1是明顯的字符數據,col2、col3是數值型數據,但是因為數據在導入時加了引號,按照字符串數據來處理,如果我們想對他們進行數值操作,就需要進行轉換。
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    如果你熟練的使用SQL,那麼這篇文章將介紹一種更直接、簡單的使用Pandas處理大多數數據操作案例。假設你對SQL非常的熟悉,或者你想有更可讀的代碼。或者您只是想在dataframe上運行一個特殊的SQL查詢。或者,也許你來自R,想要一個sqldf的替代品。
  • Pandas的介紹與基本使用
    1、什麼是Pandas當大家談論到數據分析時,提及最多的語言就是Python和SQL,而Python之所以適合做數據分析,就是因為他有很多強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成為使用最廣泛而且強大的數據分析環境之一。
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    pandas的矩陣運算可以幫我們結構化成表格數據,省去大量自己拼接表格數據的代碼開銷。本章知識點:pandas 安裝和使用pandas 數據結構(Series)pandas 數據結構(DataFrame)pandas 安裝和使用通過 pip install pandas可以直接安裝安裝pandas和相關聯的庫。
  • Python數據分析:pandas讀取和寫入數據
    繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。平時工作中,我們會接觸到不同的數據文件,比如很常見的excel文件(後綴名為xls和xlsx),csv、txt等文本文件,json文件以及sql文件等等。
  • PANDAS: 新手教程 一 - 人工智慧遇見磐創
    它可以幫助你對數據進行各種操作,並生成有關它的不同報告。我將把這篇文章分成兩篇基本知識-我將在這個故事中介紹。我將介紹Pandas的基本功能,這些功能將使你大致了解如何開始使用Pandas,以及它如何幫助你節省大量時間。高級-將通過高級的功能,使它更容易解決複雜的分析問題。它將涵蓋的主題,如風格,繪圖,讀取多個文件等。第二部分仍在進行中,敬請期待。
  • 如何通過一頓飯來說明NumPy與pandas的功用
    而在這股勢力中,其主角及成員便是NumPy、pandas、matplotlib以及scipy。本文要簡單介紹的則是主力中的主力:NumPy與pandas。誠然,R語言幾乎專注於統計分析,其第三方包無數,有著統計學的深度以及各學科統計分析應用的廣度,並且也在與Python的較量中不甘示弱。
  • 嫌pandas慢又不想改代碼怎麼辦?來試試Modin
    最近看到了一篇也是關於對pandas提速的文章,但是從另一個角度,工具。使用它可以很好的突破操作優化上的瓶頸,而這個工具就是Modin。Modin存在的意義就是:更改一行代碼來提速pandas工作流程。Pandas在數據科學領域就無需介紹了,它提供高性能,易於使用的數據結構和數據分析工具。
  • pandas與numpy中神奇的axis
    pandas與numpy中神奇的axis最近在百奧智匯兼職,基本上比較重的工作就在數據處理,所以pandas和numpy用的比較多。
  • 微積分從入門到精通的第六關——橫空出世的「非恆等變形」
    01微積分從入門到精通的十大關卡(六)—— 橫空出世的「非恆等變形」數學中最常用的方法就是「變形」,也吻合了我們常說的「不通則變,變則通,通則達」的思想。在中小學數學學習中庸的最多的「變形」則是「恆等變形」,不管是多項式的因式分解、有理函數的通分約分、無理式的有理化、冪函數的運算法則、對數函數的性質、指數函數的變換,還是讓人眼花繚亂的三角恆等式,都屬於「恆等變形」,正是恆等變形讓我們對數學的確定性堅定不移。
  • 2019版CAD軟體基礎教程+7G視頻教程,從入門到精通,3天學會繪圖
    2019版CAD軟體基礎教程+7G視頻教程,從入門到精通,3天學會繪圖本套課程有完善的課程體系,科學的教學方式,本套課程適合從基礎開始系統學習CAD的同學學習,也適合有一定基礎的同學學習提高,通過本課程的學習,可以明顯提高作圖水平,對於準備從CAD製圖、建築設計、機械製造等行業同學有非常大的幫助
  • 不會Pandas怎麼行
    如果你早已熟知 python 的使用,可以直接跳到第三段。讓我們開始吧:import pandas as pd別問為什麼是「pd」而不是「p」,就是這樣。skiprows=[2,5] 表示你在讀取文件的時候會移除第 2 行和第 5 行。
  • 2018年自考《建築結構試驗》章節試題及答案:第4章
    2018年自考《建築結構試驗》章節試題及答案:第4章第四章 結構試驗設計1.基本構件性能研究的試件大部分是採用( )A.足尺模型 B.縮尺模型 C.結構模型 D.近似模型2.實踐證明,結構的尺寸效應、構造要求、試驗設備和經費條件等因素將制約試件的( )A.強度 B.剛度
  • 懶人秘籍:教你如何避免編寫pandas代碼
    而大家都在儘可能地避免這種懸崖峭壁,結果可想而知,都轉向了如何避免編寫pandas代碼。在過去4年裡,筆者一直使用pandas作為數據分析的主要工具。必須承認,「如何避免編寫pandas代碼」的大部分內容來自於使用pandas編程的起步階段。在進行代碼審閱時,筆者仍然看到許多經驗豐富的程式設計師在看一些熱門「如何避免使用」的帖子。
  • pandas使用的25個技巧
    /blob/master/top_25_pandas_tricks.ipynb ,翻譯如有不當之處,還請批評指正。查詢pandas版本  如果你還想知道pandas所依賴的模塊的版本,你可以使用show_versions()函數: