Pandas 中,修正错误数据是数据清洗的重要步骤,常见方法包括使用布尔条件定位不合理的值并替换、使用 replace() 更正错误项、通过 where() 或 mask() 条件性修正数据,以及结合均值、中位数等统计值对异常或缺失数据进行填补,从而提升数据的准确性与一致性。本文主要介绍Python Pandas 修正错误数据。

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)

推荐文档