纠正Pandas中的缺失数据

目录

介绍

查找丢失的数据元素

使用drop和dropna删除缺少的Pandas列

丢掉丢失的Pandas行

替换值

摘要


将数据加载到灵活的结构后,我们需要确定如何处理丢失和重复的数据元素。

介绍

本文是使用PythonPandas进行数据清洗系列的一部分。它旨在利用数据科学工具和技术来使开发人员快速启动并运行。

如果您想查看本系列的其他文章,可以在这里找到它们:

现在我们的数据已加载并准备就绪,我们需要研究数据集可能包含的一些问题。

请注意,我们已经创建了完整的Jupyter Notebook,其中包含该系列模块的源数据文件,您可以在文章开头部分下载和安装

大多数数据清理过程的第一步是分析数据集,以查找并处理所有丢失的数据。当没有数据值被存储时,数据集中通常会出现数据丢失或值丢失的情况,通常是当值不是强制性形式或从其他变量计算得出时。数据集中丢失的数据很常见,并且可能对数据集的可视化和解释产生重大影响。

查找丢失的数据元素

首先,我们必须先确定要丢失的数据量和值,然后再决定如何解释丢失的值。Pandas DataFrames具有一些很棒的方法,包括:

  • isnull方法检查每个字段是否为空。
  • sum方法将传递到其中的字段加在一起。

首先,让我们开始一个新的代码块并输入以下内容:

customers.isnull()

这将在表中检查表中的每个字段,以查看其是否为空值。让我们对此进行一些扩展以得出摘要:

customers.isnull().sum()

结果如下:

这样可以更好地总结我们的值,除了名字和姓氏外,似乎还有许多要修正的值。让我们看一下处理缺失数据时可用的一些选项。

使用dropdropna删除缺少的Pandas

有时缺失值出现在我们实际上根本不需要报告的列中,或者它们的缺失值很少,因此我们可以完全删除受影响的行。让我们使用以下方法删除一些不需要的值:

  • drop方法使用自定义过滤器删除列或行
  • dropna方法删除包含空元素的列或行

如果我们先看示例列,则缺少值最多的三个项目中的两个是emailstreet_num。这些数据元素通常是唯一的,尽管查看电子邮件域名(@符号后的所有内容)可能很重要,但是大多数时候我们不想在这些列上做很多报告,因此可以通过修改来删除它们该代码块可以:

customers.drop(columns='email', inplace=True)
customers.drop(columns='street_num', inplace=True)

customers.isnull().sum()

如果现在运行此代码块,将会看到两列已从数据结构中删除。尽管邮政编码列中的缺失项目数量仍然很高,但是这会使缺失值可能更好一些,因此也请删除邮政编码。

另外,我们将假设可视化到街道级别并不重要,因此我们也将删除这些列。请务必注意,由于我们使用的是就地移除功能,因此您需要从头开始运行notebook,否则会出错。

丢掉丢失的Pandas

接下来,我们将删除一些无法根据字段解释的行,尤其是citystate。如果客户未提供此信息,我们将尝试删除这些行,看看这会影响到总数据的多少。

启动一个新的代码块并添加以下内容:

customers.dropna(subset = ['city'], inplace=True)

print(customers.shape)
print(customers.isnull().sum())

这将删除城市列中所有值为零的行。

根据打印输出,您将看到该city字段中现在没有空值,并且从1000条减少到921条记录。

修改上面的代码,并对该state字段执行相同的删除过程。这使总字段减少到848,因此存在少量重叠,并且1000条记录中的848条记录仍然相当不错。

替换值

这只会使gender字段具有空白值,但是我们将对该字段使用另一种方法,并将其替换为静态值未指定

  • fillna方法使用指定的值填充列或行

启动一个新的代码块并添加以下内容:

customers["gender"].fillna('Unspecified', inplace=True)

print(customers.shape)
print(customers.isnull().sum())

这将扫描gender列上的客户数据集,并将所有缺少的值更改为未指定

如果您现在查看输出,那么我们所有的列都有值。即使我们没有仔细研究产品,我们也会在产品DataFramecompany列中的缺失值中添加值“Unspecified”

摘要

我们简要介绍了一些简单的方法来处理数据集中的缺失值。接下来,我们将研究如何将DataFrames合并为更大、更完整的标准化数据集,以便我们完成数据清理并开始可视化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值