第8章 pandas分類數據(初學者必學)

2021-01-11 酷扯兒

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

在拿到一份數據準備做挖掘建模之前,首先需要進行初步的數據探索性分析,對數據探索性分析之後要先進行一系列的數據預處理步驟。因為拿到的原始數據存在不完整、不一致、有異常的數據,而這些「錯誤」數據會嚴重影響到數據挖掘建模的執行效率甚至導致挖掘結果出現偏差,因此首先要數據清洗。數據清洗完成之後接著進行或者同時進行數據集成、轉換、歸一化等一系列處理,該過程就是數據預處理。一方面是提高數據的質量,另一方面可以讓數據更好的適應特定的挖掘模型,在實際工作中該部分的內容可能會佔整個工作的70%甚至更多。

文章目錄

第8章 分類數據一、category的創建及其性質1. 分類變量的創建2. 分類變量的結構(b)categories和ordered屬性3. 類別的修改二、分類變量的排序1. 序的建立2. 排序三、分類變量的比較操作1. 與標量或等長序列的比較2. 與另一分類變量的比較(b)不等式判別(包含>=,<=,<,>)兩個分類變量的不等式判別需要滿足兩個條件:① 分類完全相同 ② 排序完全相同

第8章 分類數據

import pandas as pdimport numpy as npdf = pd.read_csv('data/table.csv')df.head()

一、category的創建及其性質

1. 分類變量的創建

(a)用Series創建

pd.Series(["a", "b", "c", "a"], dtype="category")

.(b)對DataFrame指定類型創建

temp_df = pd.DataFrame({'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')})temp_df.dtypes

(c)利用內置Categorical類型創建

cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])pd.Series(cat)

(d)利用cut函數創建

默認使用區間類型為標籤

pd.cut(np.random.randint(0,60,5), [0,10,30,60])

可指定字符為標籤.

pd.cut(np.random.randint(0,60,5), [0,10,30,60], right=False, labels=['0-10','10-30','30-60'])

2. 分類變量的結構

一個分類變量包括三個部分,元素值(values)、分類類別(categories)、是否有序(order)從上面可以看出,使用cut函數創建的分類變量默認為有序分類變量

下面介紹如何獲取或修改這些屬性

(a)describe方法

該方法描述了一個分類序列的情況,包括非缺失值個數、元素值類別數(不是分類類別數)、最多次出現的元素及其頻數

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))s.describe()

(b)categories和ordered屬性

查看分類類別和是否排序

s.cat.categories

s.cat.ordered

3. 類別的修改

(a)利用set_categories修改

修改分類,但本身值不會變化

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))s.cat.set_categories(['new_a','c'])

(b)利用rename_categories修改

需要注意的是該方法會把值和分類同時修改

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))s.cat.rename_categories(['new_%s'%i for i in s.cat.categories])

利用字典修改值

s.cat.rename_categories({'a':'new_a','b':'new_b'})

(c)利用add_categories添加

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))s.cat.add_categories(['e'])

(d)利用remove_categories移除

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))s.cat.remove_categories(['d'])

(e)刪除元素值未出現的分類類型

s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))s.cat.remove_unused_categories()

二、分類變量的排序

前面提到,分類數據類型被分為有序和無序,這非常好理解,例如分數區間的高低是有序變量,考試科目的類別一般看做無序變量

1. 序的建立

(a)一般來說會將一個序列轉為有序變量,可以利用as_ordered方法

s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.as_ordered()s

退化為無序變量,只需要使用as_unordered

s.cat.as_unordered()

(b)利用set_categories方法中的order參數

pd.Series(["a", "d", "c", "a"]).astype('category').cat.set_categories(['a','c','d'],ordered=True)

(c)利用reorder_categories方法

這個方法的特點在於,新設置的分類必須與原分類為同一集合

s = pd.Series(["a", "d", "c", "a"]).astype('category')s.cat.reorder_categories(['a','c','d'],ordered=True)

#s.cat.reorder_categories(['a','c'],ordered=True) #報錯#s.cat.reorder_categories(['a','c','d','e'],ordered=True) #報錯

2. 排序

先前在第1章介紹的值排序和索引排序都是適用的

s = pd.Series(np.random.choice(['perfect','good','fair','bad','awful'],50)).astype('category')s.cat.set_categories(['perfect','good','fair','bad','awful'][::-1],ordered=True).head()

s.sort_values(ascending=False).head()

df_sort = pd.DataFrame({'cat':s.values,'value':np.random.randn(50)}).set_index('cat')df_sort.head()

df_sort.sort_index().head()

三、分類變量的比較操作

1. 與標量或等長序列的比較

(a)標量比較

s = pd.Series(["a", "d", "c", "a"]).astype('category')s == 'a'

(b)等長序列比較

s == list('abcd')

2. 與另一分類變量的比較

(a)等式判別(包含等號和不等號)

兩個分類變量的等式判別需要滿足分類完全相同

s = pd.Series(["a", "d", "c", "a"]).astype('category')s == s

s != s

s_new = s.cat.set_categories(['a','d','e'])#s == s_new #報錯

(b)不等式判別(包含>=,<=,<,>)

兩個分類變量的不等式判別需要滿足兩個條件:① 分類完全相同 ② 排序完全相同

s = pd.Series(["a", "d", "c", "a"]).astype('category')#s >= s #報錯

s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.reorder_categories(['a','c','d'],ordered=True)s >= s

相關焦點

  • 第5章 精通pandas合併操作(使用pandas進行數據分析,)
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫文章目錄第5章 合併一、append與assign1. append方法2. assign方法二、combine與update1. comine方法2. update方法三、concat方法四、merge與join1. merge函數
  • pandas指南:做更高效的數據科學家
    今天我要告訴你們的是:在數據科學中,有一個軟體包是你們絕對需要學習的,那就是pandas。而pandas真正有趣的地方是,很多其他的包也在裡面。pandas是一個核心包,因此它具有來自其他各種包的特性。pandas類似於Python中的Excel:它使用表(即DataFrame)並對數據進行轉換,但它還能做更多。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • 如何使用Pandas-Profiling進行探索性數據分析
    當開始一個新的機器學習項目時,獲得機器學習數據集之後的第一步就是要了解它。我們可以通過執行探索性數據分析(EDA)來實現這一點。這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    pandas(pannel data analysis,面板數據分析),我個人覺得pandas用於數據分析處理有別於Python字典和列表的主要在於以下三點。運算效率提升,pandas是基於numpy寫的,換句話說也是c語言進行編寫並編譯成本地庫的,在運算效率會高很多。消耗資源少,因為pandas採用矩陣運算,在算法結構上比列表和字典組合數據消耗更少資源。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。●pandas的安裝推薦使用anaconda,只要安裝了anaconda,它裡面就會自帶pandas,這會為我們省去很多的麻煩。接下來就是用pandas去處理數據,數據從哪來呢?
  • 第7章 pandas文本數據初學者需要掌握的幾種基本的數據預處理方法
    過濾型方法2. isnumeric方法import pandas as pdimport numpy as np一、string類型的性質1. string與object的區別string類型和object不同之處有三:① 字符存取方法(string accessor methods,如str.count)會返回相應數據的
  • 未明學院:7張思維導圖掌握數據分析關鍵庫pandas
    原創: 未明學院Pandas是一個強大的分析結構化數據的工具集;它基於numpy,用於數據分析和數據挖掘,同時也提供數據清洗功能。pandas與numpy一起構成了數據分析的基礎雙生庫。今天小明邀請了未明的王老師,給大家總結了pandas的核心知識,主要包括以下幾個方面。pandas核心知識01、首先我們來認識一下pandas的一些基本概念。pandas概述02在使用pandas做數據分析的時候往往第一步就是將數據導入進來,比如csv或者excel格式的數據,下面這張圖就是我們讀取數據時候的方法和參數。
  • 想成為高效數據科學家?不會Pandas怎麼行
    要想成為一名高效的數據科學家,不會 Pandas 怎麼行?Python 是開源的,它很棒,但是也無法避免開源的一些固有問題:很多包都在做(或者在嘗試做)同樣的事情。如果你是 Python 新手,那麼你很難知道某個特定任務的最佳包是哪個,你需要有經驗的人告訴你。有一個用於數據科學的包絕對是必需的,它就是 pandas。
  • 微軟再推免費在線 Python 教程,面向數據科學和機器學習初學者
    去年九月,微軟曾面向 Python 初學者,推出了一套免費的教程視頻。從基本介紹和 VS Code 的配置講起,循序漸進語法概念等基礎內容講解。目前為止,該系列視頻播放量已達到將近 180 萬次。近日,微軟在此基礎上,再度更新兩個針對 Python 初學者的系列教程,作為對之前教程的補充,或者說是進階。因此,這兩個新的系列面向的不完全是純粹的 Python 新手,而是對 Python 稍有了解,並可能有其他語言的編碼經驗的人。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    ,哪個系統都一樣,初學者只需選擇自己熟悉的系統學習相應課程即可。-LDA 5-12特徵衍生 5-13HR表的特徵預處理 5-14 HR表的特徵預處理2 5-15本章小結 6-01機器學習與數據建模 6-02訓練集,驗證集,測試集 6-03分類-KNN 6-04分類-樸素貝葉斯 6-05分類-決策樹 6-06分類-支持向量機
  • 漫畫初學者必學!如何畫出不同形狀的鼻子?這個知識點非常有用啊
    漫畫初學者該如何入門?零基礎如何學漫畫?插畫初學者如何學好繪畫?學習繪畫難嗎?想必這些都是繪畫初學者們經常在想的問題吧,就是不知道如何才能學習好繪畫,然後繪畫出自己想要畫的東西 那麼今天靈貓課堂就在網絡上收集整理了一些關於如何繪畫鼻子的教程給大家,漫畫初學者必學!如何畫出不同形狀的鼻子?
  • 如何用pandas更快地進行數據可視化?
    作者:劉早起來源:早起Python(公眾號)如果你經常使用Python進行數據分析,那麼對於pandas一定不會陌生,但是Pandas除了在數據處理上大放異彩,隨著版本的不斷更新,Pandas的繪圖功能在某些情況下甚至要比matplotlib更加適用,本文就將介紹如何用
  • SQL是必學的嗎?數據科學家的技能樹該怎麼點?
    替代方法從數據分析師或數據工程師處獲取數據集後,對數據集的下一步改進就是創建新功能要素,而不只是直接從數據表中獲取欄位。例如,如果數據集中有10個欄位,則可以開發幾個全新指標作為欄位,而不是通過計算第1列和第2列來直接創建新的第11列。除了SQL以外,另一個比較容易進行此計算的工具是pandas。
  • PANDAS: 新手教程 一
    如果你對更多細節感興趣,請參閱Pandas文檔:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html。6.使用loc和iloc進行數據選擇這些都是非常有用的函數,可以幫助我們選擇數據。使用這些我們可以選擇數據的任何部分。
  • 懂Excel輕鬆入門Python數據分析包pandas(二十一):透視表
    此系列文章收錄在公眾號中:數據大宇宙 > 數據處理 >E-pd經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言本系列上一節文章最後我隨手使用了 pandas 中的透視表操作,之後有些小夥伴詢問我相關的問題。正好 pandas 的 pivot_table 也是與 Excel 透視表對應。本文簡單教你入門使用 pandas 完成透視表功能。
  • 超全的pandas數據分析常用函數總結(下篇)
    上篇文章中,小編給大家總結了數據分析中pandas這一模塊裡面常用函數的四個部分的內容,分別為導入模塊、創建數據集並讀取、數據查看與數據清洗,現在給大家介紹下篇的內容。來源 | 凹凸數據5.pandas.DataFrame.iloc()允許輸入的值:整數5、整數列表或數組[4,3,0]、整數的切片對象1:76.1 單行索引data.loc[6] # 提取索引值為6的那一行(即輸出第7行)輸出結果:data.iloc[6] # 提取第7行輸出結果同上!
  • 5個可以幫助pandas進行數據預處理的可視化圖表
    分析數據點的探索性數據分析(EDA)是在算法的數據建模之前制定假設的正確步驟。 第1步-我們將導入pandas、matplotlib、seaborn和NumPy包,我們將使用這些包進行分析。我們需要散點圖、自相關圖、滯後圖和平行圖。
  • 使用pandas和openpyxl處理複雜Excel數據
    關於Excel數據處理,很多同學可能使用過Pyhton的pandas模塊,用它可以輕鬆地讀取和轉換Excel數據。但是實際中Excel表格結構可能比較雜亂,數據會分散不同的工作表中,而且在表格中分布很亂,這種情況下啊直接使用pandas就會非常吃力。本文蟲蟲給大家介紹使用pandas和openpyxl讀取這樣的數據的方法。
  • 教程| pandas輕鬆入門 之 數據結構介紹 1
    訪問flyai.club,一鍵創建你的人工智慧項目Pandas含有使數據清洗和分析工作變得更快更簡單的數據結構和操作工具。pandas經常和其它工具一同使用,如數值計算工具NumPy和SciPy,分析庫statsmodels和scikit-learn,和數據可視化庫matplotlib。