Pandas入门第二章之数据清洗之如何处理缺失值

前言: 前面两章介绍了pandas的基本格式、以及简单的数据读取。在本节之中主要介绍一下pandas中如何进行数据清洗的。和之前一样仅仅是介绍一下pandas中基本的数据清洗的方法。如果想要真正的精通pandas的话,肯定是要一个具体的比赛。okay开始本节的学习吧。

 

本节主要介绍的内容有: 如何处理缺失数据

1、直接删除缺失数据

使用dropna()删除数据记录中含有np.nan的数据时,注意以下三点

1、如果要使用how='all',默认是检查行中的数据是否全部为缺失数据,如果要检查是否所有的列都是缺失数据。则需要指定轴为列元素 axis=1

2、dropna()默认是不修改原始数据的,如果想直接修改原始数据,则需要使用inplace=True

import pandas as pd
import numpy as np

# 生成一个简单的DataFrame数据
data = {'name': ['YYLin', 'YYLin_1', 'YYLin_2', 'YYLin_3', np.nan],
        'birth_day': ['2000-01', '2001-02', '2005-03', '2001-04', np.nan],
        'age': [6, 7, np.nan, 9, np.nan],
        'all_na': [np.nan, np.nan, np.nan, np.nan, np.nan]}

nan_data = pd.DataFrame(data)

print("显示原始数据集中的数据:\n", nan_data)

# 直接删除原始数据中为空的数据
just_drop = False
if just_drop:
    dropna_data = nan_data.dropna()
    print("删除NA后的原始数据:\n", dropna_data)
else:
    nan_data.dropna(how='all', axis=1, inplace=True)
    print("删除NA后的原始数据:\n", nan_data)

 

2、使用固定常数进行填充空值  这个数据清洗的时候,不常用,所以主要介绍一下对于不同的列填充不同的值 

注意两点,使用填充之后的数据并不修改原始数据集,如果想要使用原始数据集的话,注意将 inplace=True

fill_data_inplace = False
if fill_data_inplace:
    nan_data.fillna({'age': 8, 'birth_day': '1987-07'}, inplace=True)
    print("使用固定常数进行填充之后的数据:\n", nan_data)
else:
    fill_data = nan_data.fillna({'age': 8, 'birth_day': '1987-07'})
    print("使用固定常数进行填充之后的数据:\n", fill_data)

 

3、使用均值进行填充  相对于使用固定常数进行填充, 使用均值进行填充的方式就较为高级一点,它的实现方式是如果某列出现缺失值,则使用这列的均值填充缺失值,均值填充的时候应该注意的几点。

第一:  使用均值填充的数据只能是数值型数据 例如上例中的age 但是对于str的数据是不能填充的,

第二:  对于str类型的数据不能直接映射到一个整数,然后再填充均值,例如{男 女} 映射到{1 2}, 最后填充的结果1.5,我们不知道这个1.5表示什么。 

第三: 对于str类型的数据,可以使用众数进行填充。

第四: 同上,填充之后不修改原始数据 如果想修改的话,要使用

fill_data_inplace = True
# 使用均值进行填充
if fill_data_inplace:
    nan_data.fillna(nan_data.mean(), inplace=True)
    print("使用均值进行填充之后的结果是:\n", nan_data)
else:
    mean_fillna = nan_data.fillna(nan_data.mean())
    print("使用均值进行填充之后的结果是:\n", mean_fillna)

 

4、使用同一类别的数据的均值进行填充,这种方式相对于直接使用均值进行填充的方法,会根据原始数据不同类别的数据进行填充,但是涉及到groupby()函数,就放到后面吧。先介绍一下原理,

1、首先使用groupby() 或者分桶的方式对数据进行分类,

2、如果有缺失值的话,直接使用某个类别中的数据的均值进行填充

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值