Pandas_3 處理缺失值、數(shù)據(jù)透視表以及apply的用法

1.處理缺失值

Pandas使用NaN(Not a Number)來表示缺失值

1.1判斷是否存在缺失值以及缺失值的個數(shù)

判斷:data.isnull()pd.isnull(data),若只判斷某一列時,data.isnull(data['column'])pd.isnull(data["column"]),推薦第二種;

求缺失值的個數(shù):這塊一直不懂,貼上代碼,望以后能想明白吧(衰)

age = data["Age"]
age_is_null = pd.isnull(data['Age'])
age_null_true = age[age_is_null]
age_null_count = len(age_null_true)
print(age_null_count)

1.2 過濾缺失值

data.dropna()-------- dropna 在默認(rèn)情況下會刪除包含缺失值的行;

當(dāng)然,在你傳入?yún)?shù)axis = 1時,可以刪除包含缺失值的列;

當(dāng)傳入?yún)?shù)how = "all"時,dropna是刪除所有值為NA的行;

1.3 補(bǔ)全過濾值

你有時候可能需要以多種方式來補(bǔ)全缺失值,而并非是過濾掉缺失值,那在大多數(shù)情況下,主要使用 fillna 方法來補(bǔ)全缺失值。調(diào)用 fillna 時,可以用一個常數(shù)來代替缺失值,例如:

data.fillna(1)/ data.fillna(0) ----------使用常數(shù)1或0 來替代;

當(dāng)然你也可以為不同的列設(shè)定不同的值,這是可以傳入一個字典,例如:

data.fillna({"column1":1,"column2":0}) --------- 對column1列使用1來替代缺失值,而cloumn2列使用0來替代;

fillna 更厲害的地方在于可以用于插值,通過傳入?yún)?shù) method = "ffill" 或 method = "bfill" ,分別是向前插值和向后插值,默認(rèn)是 'ffill'; 不僅如此,你也可以用Series的平均值或中位數(shù)來填充缺失值,例如:

data.fillna(data["Age"].mean())

總結(jié):

檢查過濾值 過濾缺失值 補(bǔ)全缺失值
pd.isnull(data) data.dropna() data.fillna()

2.數(shù)據(jù)透視表------pivot_table

最簡單的透視表必須有一個數(shù)據(jù)幀和一個索引。在本例中,我們將使用“Pclass”列作為我們的索引

pd.pivot_table(data,index = 'Pclass')

此外,你也可以設(shè)置多個索引,例如:

pd.pivot_table(data,index = ["Pclass","Sex"])

如果我只想顯示‘Age’和‘Fare’列,其他列于我而言是沒用的,這時可以使用values來顯示我們只關(guān)心的列

pd.pivot_table(data,index = ["Pclass","Sex"],values = ['Age','Fare'])

上面列表中的數(shù)值代表了相應(yīng)索引下的平均值(默認(rèn)的),當(dāng)然,我們自已也可以設(shè)置其他的聚合值,例如,求和或計數(shù),這時需要使用聚合參數(shù) aggfunc,同時需要導(dǎo)入numpy

pd.pivot_table(data,index = ['Pclass','Sex'],values = ['Age','Fare'],aggfunc = np.sum)

進(jìn)行到這一步,我發(fā)現(xiàn)我只想對'Fare'列進(jìn)行求和,而'Age'列,我想要求平均值,那該怎么辦呢?

這時你需要向aggfunc傳遞一個字典,告訴pandas哪一列求平均,哪一列是求和

pd.pivot_table(data,index = ['Pclass','Sex'],values = ['Age','Fare'],aggfunc = {'Age':np.mean,'Fare':np.sum})

不過,如果我想查看一些總和數(shù)據(jù)呢?“margins=True”就可以為我們實現(xiàn)這種功能

pd.pivot_table(data,index = ['Pclass','Sex'],values = ['Age','Fare'],aggfunc = {'Age':np.mean,'Fare':np.sum},margins=True)

3. apply的用法

用途:

當(dāng)一個函數(shù)的參數(shù)存在于一個元組或者一個字典中時,用來間接的調(diào)用這個函數(shù),并將元組或者字典中的參數(shù)按照順序傳遞給參數(shù).

apply的中文意思是應(yīng)用,那在python中作為函數(shù)我想也是作為同樣的意思,其函數(shù)語法為apply(function,args),其中funcion為定義的函數(shù),args為需向function中傳入的一系列參數(shù)

apply的返回值就是function的返回值。

python中的DataFrame作為一個元組,其行或列就作為函數(shù)的參數(shù)。

下面舉例說明

import numpy as np
import pandas as pd
data = pd.DataFrame(np.random.randn(4,4),columns = list('abcd'),index = ['ind1','ind2','ind3','ind4'])
data

結(jié)果為:

            a           b           c           d
ind1    0.177938    -0.877354   1.158941    -0.825953
ind2    -0.506917   -0.060584   -0.445731   -0.860620
ind3    -0.985207   0.708244    0.151892    0.721318
ind4    -1.214316   -0.844392   -1.283502   -1.329589
t1 = data.apply(lambda x:x.max()-x.min())
t1
a    1.392254
b    1.585598
c    2.442443
d    2.050907
dtype: float64

或使用參數(shù)axis = 1,對行進(jìn)行操作

t2 = data.apply(lambda x:x.max()-x.min(),axis = 1)
t2
ind1    2.036294
ind2    0.800036
ind3    1.706525
ind4    0.485197
dtype: float64

若想要作用于數(shù)據(jù)中的每一個元素,則需要使用函數(shù) applymap
將DataFrame中的每個元素保留兩位有效數(shù)字

f = lambda x: '%.2f' % x
data.applymap(f)
          a       b       c       d
ind1    0.18    -0.88   1.16    -0.83
ind2    -0.51   -0.06   -0.45   -0.86
ind3    -0.99   0.71    0.15    0.72
ind4    -1.21   -0.84   -1.28   -1.33

這里之所以使用applymap是因為,Series有一個元素級函數(shù)的map方法。而dataframe只有applymap.

t3 = data['a'].map(lambda x:'%.1f' %x)
t3
ind1     0.2
ind2    -0.5
ind3    -1.0
ind4    -1.2
Name: a, dtype: object
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,918評論 0 13
  • 2019/2/23 Blue文 讀書打卡 書名:《思考,快與慢》 作者:丹尼爾.卡曼尼 章節(jié):第13章〈焦慮情緒與...
    Blue文閱讀 311評論 1 4
  • 寶石的迷人之處,令人心醉,我已被導(dǎo)游順利催眠,情緒高漲,但我并沒有行動。導(dǎo)游在車上的表達(dá),非常具有催眠效果,幾千塊...
    安喜喜閱讀 605評論 0 1
  • 2017.05.15. 星期一 雨天 今天下午我去上學(xué)的第一節(jié)課是數(shù)學(xué)課,老師讓我們做作業(yè),作業(yè)做完了正好就下課了...
    王紫楊閱讀 857評論 1 0
  • 什么是知識?知識就是已經(jīng)被發(fā)現(xiàn)和證明的規(guī)律,它是確定的,不需要你通過自身的成功、挫敗去驗證,然后恍然大悟的那些規(guī)律...
    idyllis閱讀 272評論 0 0

友情鏈接更多精彩內(nèi)容