
- 源数据中会存在缺失值(空值)
- 重复值
- 异常值
- 有两种丢失数据:
- 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的行
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)