在数据分析和处理的领域中,数据清洗是至关重要的一步。它就像是为珍贵的宝石进行打磨,去除杂质,展现出数据真正的光芒。而 Python ,凭借其丰富的库和强大的功能,成为了数据清洗的得力工具。
为什么数据清洗如此重要?
在现实世界中,收集到的数据往往并不完美。可能存在缺失值、重复数据、错误的数据类型、异常值等等。这些问题如果不加以处理,会严重影响后续的分析和建模结果。
例如,在一个销售数据集中,如果存在部分产品的价格记录为负数,那么基于这样的数据得出的销售趋势分析必然是不准确的。
数据清洗三部曲:去重、处理缺失值与异常值
在数据分析的征程中,数据清洗是不可或缺的重要环节。它就如同为我们的数据分析之旅清理道路上的障碍,确保我们能够顺利前行。接下来,让我们按照数据去重、缺失值处理和异常值处理的步骤,深入探索 Python 中的数据清洗世界。
代码相关知识点 | 详细说明 | 代码示例 |
---|---|---|
数据读取 | 选择合适的方法读取数据,如使用pandas 读取csv 文件 | import pandas as pd<br>data = pd.read_csv('data.csv') |
去重函数 | pandas 中的drop_duplicates 方法用于去重 | data = data.drop_duplicates() |
缺失值判断 | 使用isnull 方法判断哪些值为缺失值 | missing_values = data.isnull() |
缺失值填充 | 用均值、中位数等填充缺失值 | data = data.fillna(data.mean())<br>data = data.fillna(data.median()) |
异常值检测 | 通过箱线图或基于统计指标检测异常值 | import seaborn as sns<br>sns.boxplot(data) |
数据写入 | 清洗后的数据保存到新文件 | data.to_csv('cleaned_data.csv', index=False) |
一、数据去重
数据去重是确保数据准确性和唯一性的关键步骤。在实际数据收集过程中,可能会出现重复的记录,这会影响后续分析的准确性。
import pandas as pd
data = pd.read_csv('data.csv')
# 使用 drop_duplicates 方法去重
data = data.drop_duplicates()
这里的 drop_duplicates
方法会默认比较所有列的值来判断是否重复,如果需要根据特定列去重,可以通过指定参数来实现,比如 data.drop_duplicates(subset=['column_name'])
,就是根据指定的列 column_name
进行去重。
二、缺失值处理
2.1 生成 Python 中的缺失值
在 Python 中,我们可以通过多种方式模拟生成带有缺失值的数据。这对于测试和理解缺失值处理的方法非常有用。
import numpy as np
data = np.array([1, 2, np.nan, 4, 5])
2.2 缺失值的查找
准确地找出数据中的缺失值是处理它们的第一步。
import pandas as pd
data = pd.read_csv('data.csv')
# 查看哪些位置存在缺失值
missing_values = data.isnull()
通过 isnull
方法返回的是一个布尔型的 DataFrame ,其中 True
表示对应位置的值为缺失值。
2.3 删除法处理缺失值代码
# 用均值填充
data = data.fillna(data.mean())
# 用中位数填充
data = data.fillna(data.median())
# 用固定值填充
data = data.fillna(0)
删除包含缺失值的行或列是一种直接但较为激进的处理方式。这种方法在缺失值比例较小且对数据完整性影响不大的情况下可能适用,但也可能会导致数据量的显著减少,从而丢失一些有价值的信息。
data = data.dropna(axis=0) # 删除包含缺失值的行
data = data.dropna(axis=1) # 删除包含缺失值的列
在使用 dropna
方法时,通过 axis=0
表示按行删除, axis=1
表示按列删除。
2.4 填充法(替换法)处理缺失值
填充缺失值是一种更为常见和温和的处理方式。填充缺失值可以使用均值、中位数或固定值等。
# 用均值填充
data = data.fillna(data.mean())
# 用中位数填充
data = data.fillna(data.median())
# 用固定值填充
data = data.fillna(0)
使用均值或中位数填充时,会根据数据的分布情况来选择更合适的填充值。如果数据分布较为对称,均值可能是一个好的选择;如果数据存在偏态,中位数可能更能代表数据的中心趋势。
三、异常值的处理
异常值可能是由于数据录入错误、测量误差或特殊情况导致的。它们会对分析结果产生显著影响,因此需要妥善处理。
常见的检测异常值的方法包括基于统计指标(如均值和标准差)、箱线图等。
import seaborn as sns
# 绘制箱线图查看异常值
sns.boxplot(data)
箱线图可以直观地展示数据的分布情况,其中超出上下限(通常为 Q1 - 1.5 * IQR 到 Q3 + 1.5 * IQR ,其中 Q1 为第一四分位数,Q3 为第三四分位数,IQR 为四分位距)的点被认为是异常值。
对于异常值的处理,可以选择删除、修正或单独分析。删除异常值需要谨慎,因为它们可能包含重要的信息。修正异常值可以根据数据的特点和业务知识进行合理的调整。
数据清洗是一个细致且关键的工作,每一步都需要谨慎对待,以确保最终数据的质量和可靠性,为后续的数据分析和建模打下坚实的基础。
以下是我在课堂上的实操:
首先先导入数据
按照第一步数据去重
查看缺失值并处理
绘制分布图
对异常值的处理