数据分析9 -- 数据清洗:表格数据缺失值与异常值的处理

本文介绍了数据分析中数据清洗的重要步骤,包括如何查询和处理缺失值。通过实例展示了按单元格、列和行查看缺失值的方法,如使用isna和sum函数。还讲解了缺失值的处理策略,如删除、替换(固定值、按列替换、按行替换、最近有效值替换)和插值,并提到了线性插值的原理。此外,还涉及了如何处理重复值,使用duplicated和drop_duplicates函数进行检测和删除。
摘要由CSDN通过智能技术生成

上一篇中,我们学习了 DataFrame 常见的数据查询技巧。有了这些技巧,我们已经可以通过各种角度来分析 DataFrame, 即便 DataFrame 包含非常多的数据。

但是在现实情况中,我们往往还会面临一个棘手的问题:现实工作中,因为在数据记录和数据存储环节偶尔会出现问题,比如互联网公司后端的行为日志记录系统时不时就会出现问题,导致部分数据的丢失。所以数据分析师拿到的原始数据中会存在很多字段或者记录是丢失的。为了不让这些缺失的数据影响数据分析的结果,在分析之前往往就需要进行数据清洗,对这些缺失的数据进行预处理。

本讲我们就来学习常见的数据清洗的技巧。

什么是缺失值

当我们从 CSV 文件或者其他数据源加载到 DataFrame 中时,往往会遇到某些单元格的数据是缺失的。当我们打印出 DataFrame 时,缺失的部分会显示为 NaN, 或者 None,或者 NaT(取决于单元格的数据类型),这样的值我们就称之为缺失值。

假设阿普闪购举办了一次全员英语能力考试,每个员工最后都有听力、阅读、写作、口试四个成绩。这里我们抽样了三个同事的分数数据,打算对其做一些简单的分析。如下所示

scores = [[20.26, 71.58, 27.06, 97.51],
       [40.61, 72.32, 56.54,  5.45],
       [72.44, 68.89,  6.65, 75.54]]

执行上述代码,接下来我们需要将分数数据导入到 DataFrame 中。代码如下:

import pandas as pd
# DataFrame 的列名
index_arr = ["听力", "阅读", "写作", "口试"]
# 从 scores 列表中创建 DataFrame
# index 参数代表行索引
# columns 参数代表列索引
df_scores = pd.DataFrame(scores,
            index = ["小亮", "小明", "小E"],
            columns= index_arr)
# 打印 DataFrame
print(df_scores)
       听力     阅读     写作     口试
小亮  20.26  71.58  27.06  97.51
小明  40.61  72.32  56.54   5.45
小E  72.44  68.89   6.65  75.54

现在,三位同事的分数已经被录入了,但这会儿你的 Mentor 希望你把小李的成绩纳入一起分析。但小李的我们只有听力成绩,不知道另外三项的成绩。

代码如下:

# 生成小李的 Series,没有的成绩用 None 取代
ser_xiaol = pd.Series([30.04,None,None,None], index=index_arr,name="小李")
# 将小李的 Series 添加到 df_scores 中
df_scores = df_scores.append(ser_xiaol)
# 查看 df_scores
print(df_scores)
       听力     阅读     写作     口试
小亮  20.26  71.58  27.06  97.51
小明  40.61  72.32  56.54   5.45
小E  72.44  68.89   6.65  75.54
小李  30.04    NaN    NaN    NaN

可以看到,小李的阅读、写作和口试显示了 NaN,代表数字类型的缺失值。时间类型的缺失值一般显示为 NaT,而字符串类型的则显示为 None。

在实际项目中,缺失值可以说一直存在于原始的数据源中。如果我们在数据分析时不把它处理掉,很可能会得到错误的结果。

以这个例子来说:如果要计算写作科目的平均分,小李的 NaN 到底是当作 0,还是当作平均数,还是干脆就不把小李纳入计算,都需要根据情况进行决策,来最大化降低缺失值对于分析结果的影响

接下来我们会介绍对于缺失值不同策略的实现方式。

查询缺失值

要处理缺失值,首先第一步是查询缺失值是否存在,以及数量情况如何。与上述例子不同,现实项目中我们是不知道 DataFrame 中是不是有缺失值以及到底有多少缺失值。

接下来,我们会学习如何查询 DataFrame 中的缺失值情况。为了更好地演示如何查看缺失值,我们再添加一条记录到 DataFrame。

# 生成小王的 Series,没有的成绩用 None 取代
ser_xiaowang = pd.Series([None, 91.00, 72.34, None], index = index_arr, name="小王")
# 将小王的 Series 添加到 df_scores 中
df_scores = df_scores.append(ser_xiaowang)
# 查看 df_scores
print(df_scores)
       听力     阅读     写作     口试
小亮  20.26  71.58  27.06  97.51
小明  40.61  72.32  56.54   5.45
小E  72.44  68.89   6.65  75.54
小李 
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值