异常数据处理

常用处理方法:

异常值的处理方法常用有四种

1.删除含有异常值的记录

2.将异常值视为缺失值,交给缺失值处理方法来处理

3.用平均值来修正

4.不处理

需要强调的是,如何判定和处理异常值,需要结合实际

 

# 异常数据处理(异常数据过滤)
new_df = df.replace('?', np.nan)#替换非法字符为np.nan
datas = new_df.dropna(axis=0,how = 'any') # 只要有一个数据为空,就进行行删除操作
datas.describe().T#观察数据的多种统计指标

关于replace函数

语法:replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)

使用方法如下:

1

2

3

4

import numpy as np

import pandas as pd

df = pd.read_csv('emp.csv')

df

异常数据处理_第1张图片

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#Series对象值替换

s = df.iloc[2]#获取行索引为2数据

#单值替换

s.replace('?',np.nan)#用np.nan替换?

s.replace({'?':'NA'})#用NA替换?

#多值替换

s.replace(['?',r'$'],[np.nan,'NA'])#列表值替换

s.replace({'?':np.nan,'$':'NA'})#字典映射

#同缺失值填充方法类似

s.replace(['?','$'],method='pad')#向前填充

s.replace(['?','$'],method='ffill')#向前填充

s.replace(['?','$'],method='bfill')#向后填充

#limit参数控制填充次数

s.replace(['?','$'],method='bfill',limit=1)

#DataFrame对象值替换

#单值替换

df.replace('?',np.nan)#用np.nan替换?

df.replace({'?':'NA'})#用NA替换?

#按列指定单值替换

df.replace({'EMPNO':'?'},np.nan)#用np.nan替换EMPNO列中?

df.replace({'EMPNO':'?','ENAME':'.'},np.nan)#用np.nan替换EMPNO列中?和ENAME中.

#多值替换

df.replace(['?','.','$'],[np.nan,'NA','None'])##用np.nan替换?用NA替换. 用None替换$

df.replace({'?':'NA','$':None})#用NA替换? 用None替换$

df.replace({'?','$'},{'NA',None})#用NA替换? 用None替换$

#正则替换

df.replace(r'\?|\.|\$',np.nan,regex=True)#用np.nan替换?或.或$原字符

df.replace([r'\?',r'\$'],np.nan,regex=True)#用np.nan替换?和$

df.replace([r'\?',r'\$'],[np.nan,'NA'],regex=True)#用np.nan替换?用NA替换$符号

df.replace(regex={r'\?':None})

#value参数显示传递

df.replace(regex=[r'\?|\.|\$'],value=np.nan)#用np.nan替换?或.或$原字符

删除缺失数据
df.dropna(axis=0, how='any')
#any表示删除包含任何NaN值的给定轴,how=all会删除所有元素都是NaN的给定轴

你可能感兴趣的:(python数据处理)