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