pandas处理异常数据(缺失值和重复值)

本文介绍了如何使用pandas处理数据中的异常情况,包括利用None或np.nan标识缺失值,通过dropna()移除含有缺失值的行,使用fillna()填充缺失值。同时,详细阐述了如何检测并处理重复值,如利用drop_duplicates()保留唯一值,通过is_unique检查重复性,并用duplicated()定位重复行。

1. 缺失值**

a) 可以用None或者np.nan来表示缺失的值

import pandas as pd
import numpy as np
data=[['mark',55,'Italy',4.5,'Europe'],
      ['John',33,'China',3.8,'Asian'],
      ['mary',40,'Japan',2.3,'Asian']]
df=pd.DataFrame(data=data,columns=['name','age','country','score','continent'],
                index=[1001,1002,1003])
df.loc[1001,'score'] = None
df.loc[1004,:]=None
print(df)

在这里插入图片描述

b) 移除所有包含缺失数据的行

df=df.dropna()

在这里插入图片描述
注:
pd.dropna()同样不能改动原Dataframe,需要重新赋值

c) 只移除所有数据却缺失的行

df=df.dropna(how='all')

在这里插入图片描述

d) 判断对应位置上是否时NAN

df=df.isna()

在这里插入图片描述

e) 使用fillna()对缺失值进行填补

df=df.fillna({'score':df['score'].mean()})

在这里插入图片描述

2. 对重复值进行处理

a) 使用drop_duplicates函数(第一次出现的数据会保留)

import pandas as pd
import numpy as np
data=[['mark',55,'Italy',4.5,'Europe'],
      ['John',33,'China',3.8,'Asian'],
      ['mary',40,'Japan',2.3,'Asian'],
      ['fiona',35,'China',5.6,'Asian']]
df=pd.DataFrame(data=data,columns=['name','age','country','score','continent'],
                index=[1001,1002,1003,1004])
df=df.drop_duplicates(['country','continent'])
print(df)

在这里插入图片描述

b) is_unique确认是否存在重复值

unique获取去重之后的值

import pandas as pd
import numpy as np
data=[['mark',55,'Italy',4.5,'Europe'],
      ['John',33,'China',3.8,'Asian'],
      ['mary',40,'Japan',2.3,'Asian'],
      ['fiona',35,'China',5.6,'Asian']]
df=pd.DataFrame(data=data,columns=['name','age','country','score','continent'],
                index=[1001,1002,1003,1004])
print(df['country'].is_unique)
df=df['country'].unique()
print(df)

在这里插入图片描述

c) 定位重复行—duplicated

  1. keep参数为first时,保留第一次出现的数据,
    keep参数为False时,所有重复数据都会被标记为True
import pandas as pd
import numpy as np
data=[['mark',55,'Italy',4.5,'Europe'],
      ['John',33,'China',3.8,'Asian'],
      ['mary',40,'Japan',2.3,'Asian'],
      ['fiona',35,'China',5.6,'Asian']]
df=pd.DataFrame(data=data,columns=['name','age','country','score','continent'],
                index=[1001,1002,1003,1004])
print(df['country'].duplicated(keep=False))
print(df['country'].duplicated(keep='first'))

在这里插入图片描述
2. 定位重复行

import pandas as pd
import numpy as np
data=[['mark',55,'Italy',4.5,'Europe'],
      ['John',33,'China',3.8,'Asian'],
      ['mary',40,'Japan',2.3,'Asian'],
      ['fiona',35,'China',5.6,'Asian']]
df=pd.DataFrame(data=data,columns=['name','age','country','score','continent'],
                index=[1001,1002,1003,1004])
df=df.loc[df['country'].duplicated(keep=False),:]
print(df)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值