在数据科学领域,数据清洗是一个至关重要的步骤。本文是“使用Python和Pandas进行数据清洗”系列文章的一部分,旨在帮助开发者快速掌握数据科学工具和技术。如果对本系列的其他文章感兴趣,可以在这里找到它们:
现在已经加载了数据并准备好了,需要深入了解数据集可能存在的问题。请注意,为本系列模块创建了一个完整的Jupyter Notebook,其中包含了源数据文件,可以下载并本地安装。
大多数数据清洗过程的第一步是分析数据集,以找到并处理任何缺失的数据。缺失数据或缺失值通常发生在数据集中没有存储数据值的情况下,这通常是因为该值在表单中不是强制性的,或者是从其他变量计算得出的。数据集中的缺失数据是一个相当常见的现象,可能会对数据集的可视化和解释产生重大影响。
首先,需要找出有多少数据和哪些值缺失,然后决定如何处理这些缺失值。Pandas DataFrame有一些很好的方法可以做到这一点,包括:
首先,开始一个新的代码块,并输入以下内容:
customers.isnull()
这将写出一个表格,检查表中每个字段是否为null值。让扩展一下,以获得一个摘要:
customers.isnull().sum()
这为值提供了一个更好的摘要,除了名字和姓氏之外,看起来还有很多值需要修复。让看看处理缺失数据时可用的一些选项。
有时缺失值出现在不需要报告的列中,或者它们缺失的值很少,可以完全删除受影响的行。让使用以下方法删除一些不需要的值:
如果首先查看示例列,三个项目中有两个缺失值最多的是电子邮件和街道编号。这些数据元素通常是唯一的,虽然查看电子邮件域名(@符号之后的所有内容)可能很重要,但大多数时候不会想要对这些列进行太多报告,所以通过修改代码块来删除它们:
customers.drop(columns=['email', 'street_num'], inplace=True)
现在运行这个代码块,将看到这两个列已经从数据结构中删除了。这使得缺失值可能稍微好一点,尽管邮政编码列中缺失项的数量仍然相当高,所以也删除邮政编码。
另外,假设到街道级别的可视化并不重要,所以也将删除这些列。需要注意的是,因为使用的是就地删除,所以需要从一开始就运行笔记本,否则会得到错误。
接下来,将删除一些无法解释的行,特别是基于字段的行,例如城市和州。如果客户没有提供这些信息,将尝试删除这些行,看看这对总数据有多大影响。
开始一个新的代码块,并添加以下内容:
customers.dropna(subset=['city'], inplace=True)
print(customers.shape)
print(customers.isnull().sum())
这将删除所有城市列中有空值的行。将看到,根据打印输出,现在在城市字段中没有空值了,从1000条记录减少到了921条。
修改上述代码,并为州字段执行相同的删除过程。这将总字段数减少到848,所以有一小部分重叠,848条记录中的1000条仍然是相当好的。
这只剩下性别字段有空白值,但将使用不同的方法来处理这个字段,并用静态值"Unspecified"替换这些值。
fillna方法使用指定的值填充列或行。开始一个新的代码块,并添加以下内容:
customers['gender'].fillna('Unspecified', inplace=True)
print(customers.shape)
print(customers.isnull().sum())
这将扫描客户数据集上的性别列,并将任何缺失值更改为"Unspecified"。