约定第一行代码
import numpy as np
import pandas as pd
Dropna
滤除缺失数据
pandas的设计目标之一就是使得处理缺失数据的任务更加轻松些。pandas使用NaN作为缺失数据的标记。使用dropna使得滤除缺失数据更加得心应手。
一、处理Series对象
通过dropna()滤除缺失数据
se1=pd.Series([4,NaN,8,NaN,5])
se1
#代码结果
0 4.0
1 NaN
2 8.0
3 NaN
4 5.0
dtype: float64
se1.dropna()
#代码结果
0 4.0
2 8.0
4 5.0
dtype: float64
通过布尔序列也能滤除
se1[se1.notnull()]
#代码结构
0 4.0
2 8.0
4 5.0
dtype: float64
二、处理DataFrame对象
处理DataFrame对象比较复杂,因为你可能需要丢弃所有的NaN或部分NaN
df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])
df1
代码结果
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | NaN | NaN | 2.0 |
2 | NaN | NaN | NaN |
3 | 8.0 | 8.0 | NaN |
默认滤除所有包含NaN
df1.dropna()
代码结果
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
传入how='all'滤除全为NaN的行
df1.dropna(how='all')
代码结果
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | NaN | NaN | 2.0 |
2 | NaN | NaN | NaN |
3 | 8.0 | 8.0 | NaN |
传入axis=1滤除列
df1[3]=NaN
df1
代码结果
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
1 | NaN | NaN | 2.0 | NaN |
2 | NaN | NaN | NaN | NaN |
3 | 8.0 | 8.0 | NaN | NaN |
df1.dropna(axis=1,how="all")
代码结果
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | 2.0 | 3.0 |
1 | NaN | NaN | 2.0 |
3 | 8.0 | 8.0 | NaN |
传入thresh=n保留至少有n个非NaN数据的行
df1.dropna(thresh=1)
代码结果
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
1 | NaN | NaN | 2.0 | NaN |
3 | 8.0 | 8.0 | NaN | NaN |
df1.dropna(thresh=3)
代码结果
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
df[df.isnull().values == True] # 查看缺失数据