文章目录
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