- 源数据中会存在缺失值(空值)
- 重复值
- 异常值
处理丢失处理
- 有两种丢失数据:
- None
- np.nan(NaN)
import numpy as np
type(None)#None对象类型
type(np.nan)#NaN浮点型
- 为什么在数据分析中需要用到的是浮点类型的空而不是对象类型?
- 数据分析中会常常使用某些形式的运算来处理原始数据,如果原数据中的空值为NAN的形式,则不会干扰或者中断运算。
- NAN可以参与运算
- None是不可以参与运算
- 在pandas中如果遇到了None形式的控制则pandas会将其强转成NAN的形式
#pandas处理控空值操作
import pandas as pd
from pandas import DataFrame,Series
#伪造一组数据(存在空值)
df = DataFrame(data=np.random.randint(0,100,size=(8,6)))
df.iloc[2,3] = None
df.iloc[4,4] = np.nan
df.iloc[5,2] = None
- 方式1:对空值进行过滤(删除空所在的行数据)
- 技术:isnull,notnull,any,all
- 规律:
- isnull -> any
- notnull -> all
df.isnull()
df.notnull()
#哪些行中存在true
#any用来检测行或列中是否存在true
df.isnull().any(axis=1)
#将上一步的布尔值作为源数据的行索引
df.loc[df.isnull().any(axis=1)]#true对应的行数据就是存在缺失值的行数据
drop_index = df.loc[df.isnull().any(axis=1)].index#即将要删除的行索引
df.drop(labels=drop_index,axis=0)#将缺失行进行删除
df.notnull().all(axis=1)
df.loc[df.notnull().all(axis=1)]
- 方式2:
- dropna:可以直接将缺失的行或列进行删除
df.dropna(axis=0)
- 对缺失值进行覆盖
- fillna
df.fillna(value='666')#直接用值覆盖
df.fillna(method='ffill',axis=1)#ffill向前填充,bfill向后填充
处理重复数据
#生成一组带有重复数据的数据源(重复的行数据)
df = DataFrame(data=np.random.randint(0,100,size=(8,4)))
df.iloc[2] = [0,0,0,0]
df.iloc[4] = [0,0,0,0]
df.iloc[6] = [0,0,0,0]
#使用drop_duplicates
df.drop_duplicates(keep='first')#first保留第一行,last保留最后一行,flase全部删除
处理异常数据
- 自定义一个1000行3列(A,B,C)取值范围为0-1的数据源,然后将C列中的值大于其两倍标准差的异常值进行清洗
df = DataFrame(data=np.random.random(size=(1000,3)),columns=['A','B','C'])
#np.random.random一以内的随意数
df
twic_std = df['C'].std()*2
df['C'] > twic_std
~(df['C'] > twic_std)#取反
df.loc[~(df['C'] > twic_std)]#保留true的行
Original: https://blog.csdn.net/weixin_50248555/article/details/121357024
Author: GoldenFong
Title: 基于Pandas的数据清洗
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/679705/
转载文章受原作者版权保护。转载请注明原作者出处!