使用Python实现数据清洗与预处理

03-05 14阅读

在当今的数据驱动时代,数据分析和机器学习模型的准确性高度依赖于输入数据的质量。然而,在实际应用中,原始数据往往存在各种问题,如缺失值、异常值、重复数据等。因此,数据清洗和预处理成为数据分析和建模过程中不可或缺的重要环节。本文将通过Python编程语言,介绍如何对数据进行清洗和预处理,并提供完整的代码示例。

导入必要的库

import pandas as pdimport numpy as npfrom sklearn.preprocessing import StandardScaler, OneHotEncoderfrom sklearn.impute import SimpleImputer

pandas是一个强大的用于数据操作和分析的Python库,它提供了高效的数据结构(如DataFrame)来存储和操作表格型数据。numpy是科学计算的基础库,为多维数组对象提供了支持。sklearn.preprocessing模块中的StandardScaler用于标准化数值特征,OneHotEncoder用于对分类变量进行独热编码。sklearn.impute模块中的SimpleImputer则可以用来处理缺失值。

加载数据

假设我们有一个CSV文件data.csv,其中包含一些关于客户信息的数据,包括年龄、收入、性别等字段。

df = pd.read_csv('data.csv')print(df.head())

这行代码读取CSV文件并将其转换为一个DataFrame对象,head()方法显示了数据集的前5行,让我们可以初步了解数据的结构。

处理缺失值

检查缺失值
missing_values = df.isnull().sum()print(missing_values)

这段代码会统计每个列中缺失值的数量,输出结果可以帮助我们确定哪些列存在缺失值以及缺失的程度。

填充缺失值

对于数值型数据(如年龄、收入),我们可以使用均值或中位数来填充缺失值。对于分类数据(如性别),可以选择众数填充。

# 数值型数据填充numeric_columns = ['age', 'income']imputer_numeric = SimpleImputer(strategy='mean') # 或者strategy='median'df[numeric_columns] = imputer_numeric.fit_transform(df[numeric_columns])# 分类型数据填充categorical_columns = ['gender']imputer_categorical = SimpleImputer(strategy='most_frequent')df[categorical_columns] = imputer_categorical.fit_transform(df[categorical_columns])

这里分别创建了两个SimpleImputer对象,根据不同的策略对数值型和分类型数据进行填充。

处理异常值

可视化检测异常值

以箱线图为例,可以直观地发现某些列中的异常值。

import matplotlib.pyplot as pltplt.boxplot(df['income'])plt.show()

通过观察箱线图,如果存在远离上下四分位数范围的点,则可能是异常值。

删除或替换异常值

对于异常值,一种简单的处理方式是直接删除包含异常值的行。也可以用上下限值(例如3倍标准差之外的值视为异常值)替换异常值。

# 删除异常值(以income为例)Q1 = df['income'].quantile(0.25)Q3 = df['income'].quantile(0.75)IQR = Q3 - Q1lower_bound = Q1 - 1.5 * IQRupper_bound = Q3 + 1.5 * IQRdf = df[(df['income'] >= lower_bound) & (df['income'] <= upper_bound)]# 替换异常值df.loc[df['income'] > upper_bound, 'income'] = upper_bounddf.loc[df['income'] < lower_bound, 'income'] = lower_bound

处理重复数据

df.drop_duplicates(inplace=True)

drop_duplicates()方法可以轻松地删除重复的行,inplace=True表示直接在原DataFrame上进行操作,而不需要重新赋值。

特征工程

标准化数值特征

为了消除不同数值特征之间量纲的影响,可以对数值特征进行标准化。

scaler = StandardScaler()df[numeric_columns] = scaler.fit_transform(df[numeric_columns])
对分类变量进行独热编码

如果分类变量具有多个类别,独热编码可以将它们转换为适合机器学习算法使用的数值形式。

encoder = OneHotEncoder(sparse=False)encoded_gender = encoder.fit_transform(df[['gender']])df_encoded = pd.DataFrame(encoded_gender, columns=encoder.get_feature_names_out(['gender']))df = pd.concat([df, df_encoded], axis=1).drop(columns=['gender'])

保存清洗后的数据

df.to_csv('cleaned_data.csv', index=False)

经过以上步骤,我们已经完成了一个完整的数据清洗与预处理流程。这些操作能够大大提高后续数据分析或机器学习任务的效果。当然,在实际项目中,可能还会涉及到更复杂的场景,但掌握这些基本的技术是非常重要的。

免责声明:本文来自网站作者,不代表ixcun的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:aviv@vne.cc

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!