1、错误数据
Pandas 中,错误数据是指数据集中存在的值不符合实际或逻辑预期的情况,常见包括如下图,
类型 | 示例 | 描述 |
---|---|---|
异常值 | 例如 Duration = 450 | 远超正常范围, 可能为录入错误 |
格式错误 | 日期字段 写成 '12-31-2020' 或 'N/A' | 与预期格式不符, 影响类型转换或分析 |
分类值拼写错误 | 'femail' 、'mal' | 分类数据不一致, 影响分组与统计 |
无意义的数值 | score = -10 | 出现不可能的值, 如负数分数 |
数据类型错误 | 年龄用字符串表示, 如 'twenty' | 无法用于数值计算 |
“错误的数据”不必是“空单元格”或“错误的格式”,它可以是错误的,就像正确地应该是“ 199”而不是“ 1.99”一样。
有时可以通过查看数据集来发现错误的数据,因为对数据应该是一个预期。
如果看一下我们的数据集,可以看到在第7行中,持续时间为450,而对于所有其他行,持续时间在30到60之间。
不一定是错误的,但是考虑到这是某人的锻炼数据集,我们得出的结论是,该人在450分钟内没有锻炼。
Duration Date Pulse Maxpulse Calories 0 60 '2020/12/01' 110 130 409.1 1 60 '2020/12/02' 117 145 479.0 2 60 '2020/12/03' 103 135 340.0 3 45 '2020/12/04' 109 175 282.4 4 45 '2020/12/05' 117 148 406.0 5 60 '2020/12/06' 102 127 300.0 6 60 '2020/12/07' 110 136 374.0 7 450 '2020/12/08' 104 134 253.3 8 30 '2020/12/09' 109 133 195.1 9 60 '2020/12/10' 98 124 269.0 10 60 '2020/12/11' 103 147 329.3 11 60 '2020/12/12' 100 120 250.7 12 60 '2020/12/12' 100 120 250.7 13 60 '2020/12/13' 106 128 345.3 14 60 '2020/12/14' 104 132 379.3 15 60 '2020/12/15' 98 123 275.0 16 60 '2020/12/16' 98 120 215.2 17 60 '2020/12/17' 100 120 300.0 18 45 '2020/12/18' 90 112 NaN 19 60 '2020/12/19' 103 123 323.0 20 45 '2020/12/20' 97 125 243.0 21 60 '2020/12/21' 108 131 364.2 22 45 NaN 100 119 282.0 23 60 '2020/12/23' 130 101 300.0 24 45 '2020/12/24' 105 132 246.0 25 60 '2020/12/25' 102 126 334.5 26 60 20201226 100 120 250.0 27 60 '2020/12/27' 92 118 241.0 28 60 '2020/12/28' 103 132 NaN 29 60 '2020/12/29' 100 132 280.0 30 60 '2020/12/30' 102 129 380.3 31 60 '2020/12/31' 92 115 243.0
如何解决错误的值,例如,第7行中的“ Duration”值。
2、替换值
解决错误值的一种方法是用其他替换它们。
在示例中,很可能是拼写错误,其值应为“45”而不是“450”,只需在第7行中插入“45”即可:
例如:
Set "Duration" = 45 在第7行:
df.index(7)["Duration"] = 45
对于小型数据集,也可以一一替换错误的数据,但对于大型数据集则不能。
要用较大的数据集替换错误的数据,可以创建一些规则,例如,为合法的值设置一些边界,并替换边界之外的任何值。
例如:
循环遍历 “Duration” 列中的所有值。如果该值大于120,则将其设置为120:
for x in df.index: if df.loc[x, "Duration"] > 120: f.loc[x, "Duration"] = 120
3、删除行
处理错误数据的另一种方法是删除包含错误数据的行。
这样,您就不必找出替换它们的方法,而且很有可能不需要它们来进行分析。
例如:
删除 "Duration" 大于120的行:
for x in df.index: if df.loc[x, "Duration"] > 120: df.drop(x, inplace = True)
4、修正错误
修正错误数据是数据清洗的重要环节,主要用于处理异常值、拼写错误、格式不统一、逻辑错误等问题,确保数据准确性和可用性。
import pandas as pd import numpy as np # 构造示例数据 data = { # 450 为异常值 'Duration': [60, 450, 45, 30], # 存在拼写错误 'gender': ['Male', 'femail', 'Female', 'mal'], # 'twenty' 为类型错误 'age': ['25', 'twenty', '30', '22'], # 日期格式错误 'date': ['2020/12/01', '12-31-2020', '2020-13-01', 'not_a_date'], # -10 为逻辑错误(负分) 'score': [85, -10, 90, 100] } df = pd.DataFrame(data) # 修正异常值:将 Duration > 180 的值替换为中位数 df.loc[df['Duration'] > 180, 'Duration'] = df['Duration'].median() # 替换错误拼写 df['gender'] = df['gender'].replace({'femail': 'Female', 'mal': 'Male'}) # 类型转换:将 age 转换为数值,无法转换的设为 NaN df['age'] = pd.to_numeric(df['age'], errors='coerce') # 日期格式标准化,无法识别的日期设为 NaT df['date'] = pd.to_datetime(df['date'], errors='coerce') # 逻辑错误处理:将负数分数设为 NaN df.loc[df['score'] < 0, 'score'] = np.nan print(df)