基于Pandas的数据清洗

  • 源数据中会存在缺失值(空值)
  • 重复值
  • 异常值

处理丢失处理

  • 有两种丢失数据:
  • 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球