0 引言
Pandas生成DataFrame表格,有時候表中會有一些空值(NaN),這時候就需要用到 .dropna函數和 .fillna函數來進行去除或重新爲空值賦值,可以調用 .isnull 函數判斷表中是否存在空值,也可以結合numpy的.any函數和 .all函數判斷表格中是否存在空值。
1 Pandas處理丟失數據
import pandas as pd
import numpy as np
創建一個DataFrame表格df1
dates = np.arange(20200101,20200105)
df1 = pd.DataFrame(np.arange(12).reshape((4,3)),index=dates,columns=['A','B','C'])
df1
A | B | C | |
---|---|---|---|
20200101 | 0 | 1 | 2 |
20200102 | 3 | 4 | 5 |
20200103 | 6 | 7 | 8 |
20200104 | 9 | 10 | 11 |
創建一個DataFrame表格df2,但’D’和‘E’沒有具體值,空值
df2 = pd.DataFrame(df1,index=dates,columns=['A','B','C','D','E'])
df2
A | B | C | D | E | |
---|---|---|---|---|---|
20200101 | 0 | 1 | 2 | NaN | NaN |
20200102 | 3 | 4 | 5 | NaN | NaN |
20200103 | 6 | 7 | 8 | NaN | NaN |
20200104 | 9 | 10 | 11 | NaN | NaN |
創建兩個Series
s1 = pd.Series([3,4,6],index=dates[:3])
s2 = pd.Series([32,5,2],index=dates[1:])
df2['D'] = s1
df2['E'] = s2
df2
A | B | C | D | E | |
---|---|---|---|---|---|
20200101 | 0 | 1 | 2 | 3.0 | NaN |
20200102 | 3 | 4 | 5 | 4.0 | 32.0 |
20200103 | 6 | 7 | 8 | 6.0 | 5.0 |
20200104 | 9 | 10 | 11 | NaN | 2.0 |
調用 .dropna 去除含有空值的行,其中’any’是含有空值就會刪除該行,'all’是都是空值才刪除該行
df2.dropna(axis=0,how='any') #how=['any','all'],any任意一個或多個,all全部
A | B | C | D | E | |
---|---|---|---|---|---|
20200102 | 3 | 4 | 5 | 4.0 | 32.0 |
20200103 | 6 | 7 | 8 | 6.0 | 5.0 |
調用 .dropna 去除含有空值的列
df2.dropna(axis=1,how='any')
A | B | C | |
---|---|---|---|
20200101 | 0 | 1 | 2 |
20200102 | 3 | 4 | 5 |
20200103 | 6 | 7 | 8 |
20200104 | 9 | 10 | 11 |
調用 .fillna 給表中空值進行重新賦值
df2.fillna(value=0) # 把空值賦值爲0
A | B | C | D | E | |
---|---|---|---|---|---|
20200101 | 0 | 1 | 2 | 3.0 | 0.0 |
20200102 | 3 | 4 | 5 | 4.0 | 32.0 |
20200103 | 6 | 7 | 8 | 6.0 | 5.0 |
20200104 | 9 | 10 | 11 | 0.0 | 2.0 |
調用 .isnull 查看空值,其中True是空值
df2.isnull() # 查看空值
A | B | C | D | E | |
---|---|---|---|---|---|
20200101 | False | False | False | False | True |
20200102 | False | False | False | False | False |
20200103 | False | False | False | False | False |
20200104 | False | False | False | True | False |
調用 .isnull 並結合numpy.any判斷空值,該行只有有一個或多個空值就會返回True
np.any(df2.isnull())
A False
B False
C False
D True
E True
dtype: bool
調用 .isnull 並結合numpy.any判斷空值,該行全部爲空值纔會返回True
np.all(df2.isnull())
A False
B False
C False
D False
E False
dtype: bool