有两种丢失数据:
- None
- np.nan(NaN)
None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。
#查看None的数据类型
type(None) # NoneType
np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。
#查看np.nan的数据类型
type(np.nan) # float
np.nan + 1 # nan
# 一个空加值还是空
1) pandas中None与np.nan都视作np.nan
创建DataFrame
df = DataFrame(data=np.random.randint(0,100,size=(13,9)))
df
0 1 2 3 4 5 6 7 8
0 68 34 50 74 5 1 53 33 51
1 8 18 72 73 46 57 94 95 79
2 1 31 19 1 31 83 81 18 94
3 11 98 62 57 3 90 5 16 68
4 62 4 86 34 66 63 24 44 99
5 91 41 27 23 57 65 0 42 14
6 23 54 79 99 86 99 83 64 87
7 96 52 6 54 32 10 72 9 62
8 10 32 27 4 10 77 55 10 60
9 76 91 78 26 2 44 61 20 47
10 71 87 85 3 77 23 98 38 15
11 57 19 34 23 67 46 0 44 39
12 27 5 61 56 71 46 4 50 97
# 将某些数组元素赋值为nan
df.iloc[2,4] = None
df.iloc[5,5] = np.nan
df.iloc[2,2] = None
df.iloc[7,3] = None
df.iloc[6,8] = None
0 1 2 3 4 5 6 7 8
0 68 34 50.0 74.0 5.0 1.0 53 33 51.0
1 8 18 72.0 73.0 46.0 57.0 94 95 79.0
2 1 31 NaN 1.0 NaN 83.0 81 18 94.0
3 11 98 62.0 57.0 3.0 90.0 5 16 68.0
4 62 4 86.0 34.0 66.0 63.0 24 44 99.0
5 91 41 27.0 23.0 57.0 NaN 0 42 14.0
6 23 54 79.0 99.0 86.0 99.0 83 64 NaN
7 96 52 6.0 NaN 32.0 10.0 72 9 62.0
8 10 32 27.0 4.0 10.0 77.0 55 10 60.0
9 76 91 78.0 26.0 2.0 44.0 61 20 47.0
10 71 87 85.0 3.0 77.0 23.0 98 38 15.0
11 57 19 34.0 23.0 67.0 46.0 0 44 39.0
12 27 5 61.0 56.0 71.0 46.0 4 50 97.0
2) pandas处理空值操作
isnull()
notnull()
dropna(): 过滤丢失数据
fillna(): 填充丢失数据
(1)判断函数
isnull()
notnull()
df.isnull()
0 1 2 3 4 5 6 7 8
0 False False False False False False False False False
1 False False False False False False False False False
2 False False True False True False False False False
3 False False False False False False False False False
4 False False False False False False False False False
5 False False False False False True False False False
6 False False False False False False False False True
7 False False False True False False False False False
8 False False False False False False False False False
9 False False False False False False False False False
10 False False False False False False False False False
11 False False False False False False False False False
12 False False False False False False False False False
# df.notnull/isnull().any()/all()
# 过滤df中的空值(只保留没有空值的行)
# 鉴定某些行 或者某些列 有空值
df.isnull().any(axis=1) # axis=1 是行
0 False
1 False
2 True
3 False
4 False
5 True
6 True
7 True
8 False
9 False
10 False
11 False
12 False
dtype: bool
# any 遇到True就返回Ture
# all 取全部,有一个false 就返回false
# notnull 跟 all
# notnull 返回的是有空的为True
# isnull 跟 any
# isnull 返回的是有空的为false
df.notnull().all(axis=1)
0 True
1 True
2 False
3 True
4 True
5 False
6 False
7 False
8 True
9 True
10 True
11 True
12 True
dtype: bool
df.loc[df.notnull().all(axis=1)]
0 1 2 3 4 5 6 7 8
0 68 34 50.0 74.0 5.0 1.0 53 33 51.0
1 8 18 72.0 73.0 46.0 57.0 94 95 79.0
3 11 98 62.0 57.0 3.0 90.0 5 16 68.0
4 62 4 86.0 34.0 66.0 63.0 24 44 99.0
8 10 32 27.0 4.0 10.0 77.0 55 10 60.0
9 76 91 78.0 26.0 2.0 44.0 61 20 47.0
10 71 87 85.0 3.0 77.0 23.0 98 38 15.0
11 57 19 34.0 23.0 67.0 46.0 0 44 39.0
12 27 5 61.0 56.0 71.0 46.0 4 50 97.0
# df.dropna() 可以选择过滤的是行还是列(默认为行):axis中0表示行,1表示的列
# 带dropna系列的函数方法 中axis是相反 的
df.dropna(axis=0)
0 1 2 3 4 5 6 7 8
0 68 34 50.0 74.0 5.0 1.0 53 33 51.0
1 8 18 72.0 73.0 46.0 57.0 94 95 79.0
3 11 98 62.0 57.0 3.0 90.0 5 16 68.0
4 62 4 86.0 34.0 66.0 63.0 24 44 99.0
8 10 32 27.0 4.0 10.0 77.0 55 10 60.0
9 76 91 78.0 26.0 2.0 44.0 61 20 47.0
10 71 87 85.0 3.0 77.0 23.0 98 38 15.0
11 57 19 34.0 23.0 67.0 46.0 0 44 39.0
12 27 5 61.0 56.0 71.0 46.0 4 50 97.0
(3) 填充函数 Series/DataFrame
# fillna():value和method参数
# ffill 向前填充
# bfill 向后填充
df.fillna(method='ffill',axis=0)
# 数据清洗案例
temp_df = pd.read_excel('测试数据.xlsx')
temp_df = temp_df[[1,2,3,4]]
temp_df.dropna(axis=0)
# 首次填充之后对应的结果
test_df = temp_df.fillna(method='bfill',axis=0)
# 校验test_df中还是否存在空值:查看列中是否还有空值
test_df.isnull().any(axis=0)
1 False
2 False
3 False
4 False
dtype: bool
原文:https://www.cnblogs.com/Quantum-World/p/11354463.html