pandas数据缺失处理
一 前言
数据分析中对数据的清洗是个比较重要的工作,如果处理不当会造成数据分析错误,故学习好相关数据清洗知识很有必要。知识追寻者忙于学习其它知识,有点懈怠了python, 努力补救中。
公众号:知识追寻者
知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)
二 数据缺失处理
数据缺失处理也就是对NaN的处理,通常的做法就是省略或者替换;
2.1 空值判定
调用isnull()
方法进行空值判定,返回布尔值;
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
ser = pd.Series(['111','222',np.NaN])
# 空判定
print(ser.isnull())
输出
0 False
1 False
2 True
dtype: bool
2.2丢弃NaN
对于有些数据存在NaN,一般进行数据分析时都是不需要的数据,故会省略掉;使用 ser.dropna()
方法可以略过所有的NaN数据
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
ser = pd.Series(['111','222',np.NaN])
# 过滤掉所有NAN
print(ser.dropna())
输出
0 111
1 222
dtype: object
如果想删除整列全为NaN的可以指定参数how= 'all'
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 过滤掉都是NaN的列
print(data.dropna(how='all'))
输出
0 1 2
0 2.5 5.0 3.0
1 1.0 NaN NaN
可以指定按列丢弃 axis = 1
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 按列丢弃
print(data.dropna(axis=1,how='all'))
输出
0 1 2
0 2.5 5.0 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
2.3 数据填充
另一种手段对NaN的处理可以设置为默认值,比如 数值0;
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 填充
print(data.fillna(0))
输出
0 1 2
0 2.5 5.0 3.0
1 1.0 0.0 0.0
2 0.0 0.0 0.0
对每个列设置默认值替换NaN可以使用字典
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
dic = {0:1, 1:2, 2:3}
# 填充
print(data.fillna(dic))
输出
0 1 2
0 2.5 5.0 3.0
1 1.0 2.0 3.0
2 1.0 2.0 3.0
再复习一下填充,之前文章有到过;此时会对每列最后一个值进行填充NaN,并且使用limit 限定填充次数
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 填充
print(data.fillna(method='ffill', limit=1))
输出
0 1 2
0 2.5 5.0 3.0
1 1.0 5.0 3.0
2 1.0 NaN NaN