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