用python进行数据清洗与准备之处理缺失值

学习笔记

进行数据分析和建模,需要准备数据,比如:加载,清理,转换,重新排列

处理缺失值
对于数据型数据,pandas 使用浮点值NaN(Not a Number)
检测是否为空值

string_data.isnull()

pandas 中采用R语言的编程惯例,将缺失值成为NA,意思是not available

统计学应用中,NA数据可以是不存在的数据或者是存在但不可观察的数据
当清洗数据用于数据分析时,对缺失数据本身进行分析以确定数据收集问题或数据丢失导致的数据偏差通常很重要

python内建的None值在对象池数组中也被当作NA处理

NA处理方法
dropna
根据每个标签的值是否是缺失数据来筛选轴标签,并根据允许丢失的数据量来确定阈值

fillna
用某些值填充缺失的数据或使用插值方法(ffill或bfill)

isnull
返回表明哪些值是缺失值的布尔值

notnull
isnull的反函数

过滤缺失值
1.使用pandas.isnull和布尔值索引手动地过滤缺失值
2.dropna过滤缺失值
3.在series上使用dropna,返回series中所有非空数据及其索引值

=============================

import pandas as pd
from numpy import nan as NA
data=pd.Series([1,NA,3.5,NA,7])
data.dropna()

0 1.0
2 3.5
4 7.0
dtype: float64

等同于

data[data.notnull()]

0 1.0
2 3.5
4 7.0
dtype: float64

结果一样

=============================

当处理DataFrame对象时,会更复杂一点,可能想要删除全部为NA或包含有NA的行或列。
dropna默认情况下会删除包含缺失值的行

data=pd.DataFrame([[1,6.5,3],[2,NA,NA],[NA,NA,NA],[NA,6.5,3]])
cleaned=data.dropna()
data

cleaned

清洗后的数据,过滤缺失值

删除所有值均为NA的行,dropna(how=‘all’)

data=pd.DataFrame([[1,6.5,3],[2,NA,NA],[NA,NA,NA],[NA,6.5,3]])
cleaned=data.dropna(how='all')
cleaned


用同样的方式删除列,传入参数,axis=1
dropna(axis=1,how=‘all’)

过滤DataFrame的行相关方法往往涉及时间序列数据,如果只想保留包含一定数据的观察值的行,可以使用thresh参数来表示

import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(7,3))
df.iloc[:4,1]=NA
df.iloc[:2,2]=NA
df

df.dropna(thresh=2)

补全缺失值
多数情况下,使用 fillna 方法来补全缺失值,调用fillna时可以使用一个常数来替代缺失值

df.fillna(0)


调用 fillna 时使用字典,可以为不同列设定不同的填充值

df.fillna({1:0.5,2:0})


fillna 返回一个新的对象,也可以修改已存在的对象

_=df.fillna(0,inplace=True)
df

用于重建索引的相同的插值方法也可以用于 fillna

df=pd.DataFrame(np.random.randn(6,3))
df.iloc[2:,1]=NA
df.iloc[4:,2]=NA
df

df.fillna(method='ffill')

df.fillna(method='ffill',limit=2)


ffill 是向前填充

fillna 还可以将series的平均值或中位数用于填充缺失值

data=pd.Series([1,NA,3.5,NA,7])
data.fillna(data.mean())

0 1.000000
1 3.833333
2 3.500000
3 3.833333
4 7.000000
dtype: float64

fillna 函数参数:

value
标量值或字典型对象用于填充缺失值

method
插值方法,如果没有其他参数,默认时是“ffill"

axis
需要填充的轴,默认为0

inplace
修改被调用的对象,而不是生成一个备份

limit
用于向前或向后填充时最大的填充范围

内容部分引用于《利用Python进行数据分析》第2版(Wes McKinney著,徐敬一译),仅供大家一起学习交流

如有错误,请多指教

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值