python必備庫 學習筆記 pandas(二)

pandas

缺失值(nan)處理

處理思路

1.思路一
針對數據量比較大的樣本,我們可以直接刪除掉有缺失值的幾行數據即可
2. 思路二
用改行的平均值、中位數等其他指標來對缺失值進行替換

判斷是否存在nan

  1. pandas.isnull(DataFrame)
    非nan返回False,nan返回True
  2. pandas.notnull(DataFrame)
    非nan返回True,nan返回False

刪除含nan的樣本

DataFrame.dropna(inplace=False)

  • inplace:是否直接在原DataFrame上進行修改,=False表示在原DataFrame上進行修改,=True表示返回新的DataFrame,默認是False

替換/插補

DataFrame.fillna(value,inplace=False)

  • value:用於替換nan的值
  • inplace:是否直接在原DataFrame上進行修改,=False表示在原DataFrame上進行修改,=True表示返回新的DataFrame,默認是False

實例

  1. 檢測是否存在nan

    方法一
    pandas.isnull(DataFrame)會判斷DataFrame裏每個元素值,爲nan返回true,不是nan返回False
    numpy.any(values)判斷values裏面的所有值,只要有一個true,就返回true;全爲false就返回false
    也就是說,np.any(pd.isnull(data))的結果爲true就說明data裏面含有nan
    在這裏插入圖片描述
    方法二
    pandas.any(values)分別在每個字段裏判斷values,只要有一個true,就返回true;全爲false就返回false,最終返回每個字段的bool值
    pd.isnull(data).any()表示,爲true的字段含有nan
    在這裏插入圖片描述
    pandas.innull()和pandas.notnull()用法一樣,均可用於檢測nan,返回值相反

  2. 處理nan值

    1. 刪除含nan的樣本

      原文件是20640行,刪除含nan的行後是20433行
      在這裏插入圖片描述

    2. 替換nan值
      用該列的平均值或其他指標替換nan

      之前求得,nan值是在total_bedrooms列上,現在用該列平均值替換nan即可
      在這裏插入圖片描述
      data[‘total_bedrooms’].fillna(value=data[‘total_bedrooms’].mean(),inplace=True),用total_bedrooms列的平均值替換該列的nan值,最後檢測發現沒有nan
      在這裏插入圖片描述
      一般來說,刪除nan和替換nan只用其一

非nan的缺失值處理

常見的非nan的缺失值,如?、#等

處理思路

  1. 將其替換成nan
    DataFrame.replace(to_replace=,value=)
    • to_replace:想替換的符號,如’?‘
    • value:用於替換的值
      在這裏插入圖片描述
      用numpy.nan替換?
      在這裏插入圖片描述
  2. 處理nan

見上面 缺失值(nan)處理

數據離散化

什麼是數據離散化

連續屬性的離散化就是在連續屬性的值域上,將值域劃分爲若干個離散的區間,最後用不同的符號或整數值代表落在每個子區間中的屬性值。


原始數據:年齡25、58、35…
將年齡分爲幾個階段[18-30),[30-45),[45-60)
這樣就可以將數據分到三個區間,最終變成一個矩陣
    [18-30)  [30-45)  [45-60)
    成年   中年    老年
25    1    0     0
58    0    0     1
35    0    1     0

這種數據表示方法就是數據離散化,這種方法叫做one-hot編碼/啞變量

爲什麼要離散化

連續屬性的離散化是爲了簡化數據結構,離散化技術可以用來減少給定連續屬性值的個數,離散化方法經常作爲數據挖掘的工具

數據離散化思路

  1. 分組
    自動分組:pandas.qcut(data,bins)

    • data:需要分組的數據
    • bins:需要分的組數

    自定義分組:pandas.cut(data,list)

    • data:需要分組的數據
    • list:自定義好的分組區間用列表形式傳入

    分組完成之後,會返回一個Series

  2. 將分組好的數據轉化爲one-hot編碼
    pandas.get_dummies(series,prefix)

    • series:之前分組好的序列
    • prefix:顯示結果分組的前綴

實例

  1. 需要處理的數據
    在這裏插入圖片描述
  2. 分組
    對原數據進行自動分組
    在這裏插入圖片描述
    對原數據進行自定義分組
    在這裏插入圖片描述
  3. 將序列轉化爲one-hot編碼 在這裏插入圖片描述

pandas.concat()

pandas.concat([df1,df2],axis=1)

  • 按行或列進行合併,axis=0爲列,axis=1爲行
    示例
    將下列兩個df合併
    在這裏插入圖片描述
    在這裏插入圖片描述
    在df1列上對df2進行合併
    在這裏插入圖片描述
    在df1行上對df2進行合併
    在這裏插入圖片描述
    如果兩個df字段不一致的情況下進行列合併,則df2中沒有df1的字段會填充nan,df1中沒有df2的字段也會填充nan
    在這裏插入圖片描述

pandas.merge()

pandas.merge(left,right,how=‘inner’,on)

  • left:左側表
  • right:右側表
  • how:連接方式,默認是inner內連接,left左連接,right右連接
  • on:連接的字段,用於連接的字段會自動去重

pandas.merge()超詳細講解

交叉表

交叉表用於計算一列數據對於另外一列數據的分組個數(尋找兩個列之間的關係)
pandas.crosstab(values1,values2)

用ocean_proximity,median_house_value兩列畫交叉表,前者代表與海的距離,後者代表房價
在這裏插入圖片描述
生成的交叉表如圖,
在這裏插入圖片描述
交叉表的索引是ocean_proximity列上的所有取值
在這裏插入圖片描述

透視表

DataFrame.pivot_table([],index)

  • []:需要分組的字段
  • index:分組之後的索引

直接生成ocean_proximity與對應的平均房價表
在這裏插入圖片描述

分組與聚合

什麼是分組與聚合

分組與聚合是分析數據的一種方式,通常與一些統計函數一起使用,查看數據的分組情況

  • 分組:將含有某個或某些共同屬性的數據分到同一個組,如某位學生的各科成績,
  • 聚合:將每組的數據求出最大值或最小值就是一個聚合的過程

如何實現分組與聚合

  • 分組 DataFrame/Series.groupby(key,as_index=False)
  • key:分組的列數據,可以多個
    原始數據data3, DataFrame.groupby()
    在這裏插入圖片描述
    對data3按name進行分,分組的結果並不能直接看到,需要聚合之後才能看到
    在這裏插入圖片描述
  • 聚合 :求某個統計值就是聚合
    對data3聚合,求出每列的最大值
    在這裏插入圖片描述
    對data3聚合,求出每列的平均值
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章