数据清理
介绍
本指南介绍了数据清理的概念,包括识别不完整数据、删除粗数据、处理无效数据等。现实世界中出现的大多数数据都是非结构化的,需要重塑和进一步的数据预处理。让我们学习使用Python 中提供的Pandas库进行数据清理的几个步骤。
考虑一个名为student_grade.csv的 CSV 文件,该文件根据 four4 个属性保存了近 1500 名学生的数据。快速了解数据的一个好方法是查看数据集的前 10 行,如下所示:
学生 ID | St_GRADE | 左学校 | 阶段 | |
---|---|---|---|---|
1 | 2K131 | 7.5 | 不 | 12 |
2 | 2K152 | 7 | 不 | 12 |
3 | 2K163 | 无 | 是的 | 十三 |
4 | 2K174 | 9 | 不 | 十三 |
5 | 2K185 | 7 | 不 | 13.67 |
6 | 2K174 | 9 | 不 | 十三 |
7 | 2K106 | 8 | 不 | 14.79 |
8 | 2K185 | 6.3 | 是的 | 十三 |
9 | 2K152 | 6 | 不 | 十三 |
10 | 2K119 | 无 | 不 | 12 |
当前的数据集已经重塑,因此我们定义以下四个目标来执行数据清理任务:
- 找出缺失的成绩。
- 删除已离校的学生记录。
- 识别并删除重复记录(重复条目)。
- 识别并更正无效年龄。
基线
要启动该过程,第一步是导入 Pandas 库并读取数据集。
import pandas as pd
df = pd.read_csv('student_grade.csv')
# Storing the topmost 10 rows in a new variable df_sub
df_sub = df.head(10)
.head(10)函数在df变量后使用,用于提取 DataFrame 的前 10 行。
识别缺失的 V 值
在深入研究代码之前,了解缺失数据的可能来源非常重要。以下是缺失数据可能产生的一些原因:
- 用户可能忘记填写数据。
- 用户可能没有关于要填写的数据的完整信息。
- 出现系统错误的可能性。
在St_GRADE列中,我们可以看到空值为n/a,但预览中只有几条记录,完整数据也可能包含任何其他形式的缺失值。让我们识别出n/a 的行:
missing_values = 'n/a'
df_sub = df_sub[df_sub.St_GRADE==missing_values]
输出:
| |学生 ID |学生等级|离开学校|学生年龄| | --- | --- | --- | | 3 | 2K163 | n/a| 是 | 13 |10 | 2K119 | n/a | 否 | 12
大多数情况下,缺失值不是由用户硬编码的。如果用户没有提及任何特定术语(此处为n/a),则 Pandas 将为每个缺失值单元格分配一个NaN值。可以按如下方式识别和处理此类单元格:
import numpy as np
dummy = pd.Series([45, np.NaN, 12])
# Checking which instances have missing values
dummy.isnull()
# Output:
# 0 False
# 1 True
# 2 False
# dtype: bool
# To fill the missing values, use fillna()
dummy = dummy.fillna(5)
dummy
# Output:
# 0 45.0
# 1 5.0
# 2 12.0
# dtype: float64
从上面的代码中可以注意到,在向虚拟Series填充整数5后,我们仍然会收到 float 数据类型的输出。这是因为在数据类型为float64的 Series 中最初存在NaN。
删除已离校学生记录已离校学生记录
接下来,让我们删除已离开学校的学生的记录。这是因为,从长远来看,这些数据可能没有用处,或者这可能会导致数据量增加。为了实现这一点,我们对 DataFrame 进行子集化,包括St_GRADE列中单元格的值不等于YES 的所有行。
# Subsetting the DataFrame df based on the St_GRADE column
df_sub = df_sub[df_sub.St_GRADE != 'YES']
您可以观察已删除记录的输出,如下所示:
学生 ID | St_GRADE | 左学校 | 阶段 | |
---|---|---|---|---|
1 | 2K131 | 7.5 | 不 | 12 |
2 | 2K152 | 7 | 不 | 12 |
3 | 2K174 | 9 | 不 | 十三 |
4 | 2K185 | 7 | 不 | 13.67 |
5 | 2K174 | 9 | 不 | 十三 |
6 | 2K106 | 8 | 不 | 14.79 |
7 | 2K152 | 6 | 不 | 十三 |
识别并删除重复记录删除重复记录
为了识别 DataFrame 的重复记录,我们可以使用Pandas 库中的duplicated()函数。
# Checking the duplicate rows
df_sub["is_duplicate"]= df_sub.duplicated()
上述代码查找重复的实例,并使用布尔逻辑标记它们,如果行重复则为True ,否则为False。 之后,结果存储在DataFrame df_sub的名为is_duplicate的列中,如下所示:
学生 ID | St_GRADE | 左学校 | 阶段 | 是否重复 | |
---|---|---|---|---|---|
1 | 2K131 | 7.5 | 不 | 12 | 错误的 |
2 | 2K152 | 7 | 不 | 12 | 错误的 |
3 | 2K174 | 9 | 不 | 十三 | 错误的 |
4 | 2K185 | 7 | 不 | 13.67 | <font style="vertical-a |
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~