龙空技术网

Python数据清洗:处理缺失值、异常值和重复值

小蜜蜂分享生活琐事 238

前言:

现在大家对“python统计重复次数”大约比较注意,看官们都需要了解一些“python统计重复次数”的相关文章。那么小编也在网摘上网罗了一些有关“python统计重复次数””的相关文章,希望我们能喜欢,小伙伴们快快来了解一下吧!

在Python数据分析中,数据清洗是一个非常重要的步骤。数据清洗包括处理缺失值、异常值和重复值,以及进行数据转换和归一化等操作。本文将介绍如何使用Python进行数据清洗,并提供相应的代码示例。

1.缺失值处理

缺失值是指数据集中某些数据项的值为空或未知。在数据分析中,通常需要对缺失值进行处理。以下是一些常用的处理方法:

1.1 删除含有缺失值的行或列

可以使用pandas库中的dropna()函数删除含有缺失值的行或列。例如:

import pandas as pddata = pd.DataFrame({'A': [1, 2, None], 'B': [4, None, 6]})data = data.dropna()print(data)

输出结果为:

     A    B0  1.0  4.01  2.0  NaN2  NaN  6.0     A    B0  1.0  4.0

如上所示,可以看到,含有缺失值的行被删除了。

1.2 用平均值或众数填充缺失值

可以使用pandas库中的fillna()函数用平均值或众数填充缺失值。例如:

import pandas as pddata = pd.DataFrame({'A': [1, 2, None], 'B': [4, None, 6]})data['A'] = data['A'].fillna(data['A'].mean())data['B'] = data['B'].fillna(data['B'].mode()[0])print(data)

data['B'].mode()表示:计算 'B' 列中的众数,即出现次数最多的值。mode() 方法返回一个包含众数的 Series。最后 data['B'].mode()[0]表示从众数的 Series 中选择第一个值,即取得列 'B' 中出现频率最高的值。 输出结果为:

     A    B0  1.0  4.01  2.0  4.02  1.5  6.0

可以看到,缺失值被用平均值填充了。上面两处代码的具体运行截图如下所示。

2.异常值处理

异常值是指数据集中与大多数数据不同的离群点。在数据分析中,通常需要对异常值进行处理。以下是一些常用的处理方法:

2.1 用平均值或中位数替换异常值

可以使用numpy库中的mean()和median()函数计算数据的平均值和中位数,然后用它们替换异常值。例如:

import numpy as npimport pandas as pdimport copydata = pd.DataFrame({'A': [1, 2, 3, np.inf, -np.inf]})copy_data = copy.deepcopy(data)copy_data['A'] = copy_data['A'].replace([np.inf, -np.inf], np.nan)print(copy_data)mean = copy_data['A'].mean(skipna=True)median = copy_data['A'].median(skipna=True)data['A'] = np.where((data['A'] > mean + 3 * median) | (data['A'] < mean - 3 * median), median, data['A'])print(data)

输出结果为:

 A0  1.01  2.02  3.03  NaN4  NaN     A0  1.01  2.02  3.03  2.04  2.0

可以看到,异常值被用中位数替换了。这段代码首先创建了一个 DataFrame,然后使用深拷贝创建了一个拷贝 DataFrame。在拷贝 DataFrame 上,使用 .replace 方法将正无穷大和负无穷大替换为 NaN(缺失值)。接着,计算拷贝 DataFrame 的 'A' 列的均值和中位数,注意使用了 skipna=True 参数来忽略缺失值。

接下来,使用 np.where 来检查原始 DataFrame 中的 'A' 列是否超出了 3 倍中位数的范围,如果是,则用中位数替换。

这个代码块的功能是处理 'A' 列中的异常值,将超出阈值的值替换为中位数,并且在处理之前通过拷贝 DataFrame 将正无穷大和负无穷大替换为 NaN。

3.重复值处理

重复值是指数据集中某些数据项的值相同。在数据分析中,通常需要对重复值进行处理。以下是一些常用的处理方法:

可以使用pandas库中的drop_duplicates()函数删除重复值。例如:

import pandas as pddata = pd.DataFrame({'A': [1, 2, 2, 3, 3, 3], 'B': [4, 5, 5, 6, 6, 6]})data = data.drop_duplicates()print(data)

输出结果为:

     A  B0  1  41  2  53  3  6    

可以看到,重复值被删除了。

用众数替换重复值

可以使用pandas库中的mode()函数计算数据的众数,然后用它替换重复值。例如:

import pandas as pdimport numpy as np# 创建示例数据data = pd.DataFrame({'A': [1, 2, 2, 3, 3, 3, 4, 4, 5, 6]})print(data)# 计算众数mode_value = data['A'].mode()[0]# 将重复值替换为众数data['A'] = np.where(data.duplicated(subset=['A']), mode_value, data['A'])print(data)

在这个示例中,我们首先创建一个包含重复值的 DataFrame 'data'。然后,使用 .mode() 方法计算 'A' 列的众数,并将其保存在变量 mode_value 中。接着,使用 np.where 来检查 'A' 列是否有重复值,如果有,就将其替换为众数。运行代码后,输出结果为:

 A0  11  22  23  34  35  36  47  48  59  6   A0  11  22  33  34  35  36  47  38  59  6

可以看到,重复值被用众数替换了。其中data.duplicated(subset=['A']):这部分代码返回一个布尔数组,指示每行是否是重复行。subset=['A'] 表示我们只检查列 'A' 是否有重复值。

标签: #python统计重复次数 #python去掉重复值 #python怎么处理数据异常值