• 学会使用Pandas进行数据清洗


    大家好,如果你对数据科学感兴趣,那么数据清洗可能对你来说是一个熟悉的术语,本文将向你介绍使用Pandas进行数据清洗的过程。我们的数据通常来自多个资源,而且并不干净,它可能包含缺失值、重复值、错误或不需要的格式等,在这种混乱的数据上运行实验会导致错误的结果。因此,在将数据输入模型之前,有必要对数据进行准备,这种通过识别和解决潜在的错误、不准确性和不一致性来准备数据的做法被称为数据清洗。

    本文将使用著名的鸢尾花数据集进行操作。鸢尾花数据集包含三个品种的鸢尾花的四个特征测量值:萼片长度、萼片宽度、花瓣长度和花瓣宽度。本文将使用以下库:

    • Pandas:用于数据处理和分析的强大库

    • Scikit-learn:提供数据预处理和机器学习的工具

    1. 加载数据集

    使用Pandasread_csv()函数加载鸢尾花数据集:

    1. column_names = ['id''sepal_length''sepal_width''petal_length''petal_width''species']
    2. iris_data = pd.read_csv('data/Iris.csv', names= column_names, header=0)
    3. iris_data.head()

    输出:

    idsepal_lengthsepal_widthpetal_lengthpetal_widthspecies
    15.13.51.40.2Iris-setosa
    24.93.01.40.2Iris-setosa
    34.73.21.30.2Iris-setosa
    44.63.11.50.2Iris-setosa
    55.03.61.40.2Iris-setosa

    参数header=0表示CSV文件的第一行包含列名(标题)。

    2. 探索数据集

    为了深入了解数据集的基本信息,本文将使用pandas的内置函数打印一些基本信息:

    1. print(iris_data.info())
    2. print(iris_data.describe())

    输出:

    1. RangeIndex: 150 entries, 0 to 149
    2. Data columns (total 6 columns):
    3.  #   列名           非空计数         类型  
    4. ---  ------        --------------  -----  
    5.  0   id            150 non-null    int64  
    6.  1   sepal_length  150 non-null    float64
    7.  2   sepal_width   150 non-null    float64
    8.  3   petal_length  150 non-null    float64
    9.  4   petal_width   150 non-null    float64
    10.  5   species       150 non-null    object 
    11. dtypes: float64(4), int64(1), object(1)
    12. memory usage: 7.2+ KB
    13. None

    图片

    iris_data.describe()的输出结果

    info()函数有助于了解数据帧的整体结构、每列中非空值的数量以及内存使用情况,而汇总统计信息则提供了数据集中数值特征的概览。

    3. 检查类别分布

    这是了解分类列中类别分布情况的重要步骤,对于分类任务来说非常重要,可以使用Pandas中的value_counts()函数来执行此步骤。

    print(iris_data['species'].value_counts())
    

    输出:

    1. Iris-setosa        50
    2. Iris-versicolor    50
    3. Iris-virginica     50
    4. Name: species, dtype: int64

    输出的结果显示,数据集是平衡的,每个品种的代表数量相等,这为所有3个类别进行公平评估和比较奠定了基础。

    4. 删除缺失值

    由于从info()方法明显可见本文的数据中有5列没有缺失值,因此本文将跳过此步骤。但如果遇到任何缺失值,可以使用以下命令处理它们:

    iris_data.dropna(inplace=True)
    

    5. 删除重复值

    重复值可能会扭曲我们的分析结果,因此本文会从数据集中删除它们。首先使用下面的命令检查是否存在重复值:

    1. duplicate_rows = iris_data.duplicated()
    2. print("Number of duplicate rows:", duplicate_rows.sum())

    输出:

    Number of duplicate rows: 0
    

    本文的数据集中没有重复值。不过,如果有重复值,可以使用drop_duplicates()函数将其删除:

    iris_data.drop_duplicates(inplace=True)
    

    6. 独热编码

    对于分类分析,本文将对品种列进行独热编码。由于机器学习算法更适合处理数值数据,所以本文进行独热编码这一步骤。独热编码过程将分类变量转换为二进制(01)格式。

    1. encoded_species = pd.get_dummies(iris_data['species'], prefix='species', drop_first=False).astype('int')
    2. iris_data = pd.concat([iris_data, encoded_species], axis=1)
    3. iris_data.drop(columns=['species'], inplace=True)

    图片

    7. 浮点数列的归一化

    归一化是将数值特征缩放为均值为0、标准差为1的过程,这一过程旨在确保各特征对分析的贡献相等。本文将对浮点数列进行归一化,以便进行一致的缩放。

    1. from sklearn.preprocessing import StandardScaler
    2. scaler = StandardScaler()
    3. cols_to_normalize = ['sepal_length''sepal_width''petal_length''petal_width']
    4. scaled_data = scaler.fit(iris_data[cols_to_normalize])
    5. iris_data[cols_to_normalize] = scaler.transform(iris_data[cols_to_normalize])

    图片

    归一化后的iris_data.describe()输出结果

    8. 保存清洗后的数据集

    将清洗后的数据集保存到新的CSV文件中。

    iris_data.to_csv('cleaned_iris.csv', index=False)
    

    如果完成上述步骤,你已成功使用Pandas清洗了第一个数据集。在处理复杂数据集时,可能会遇到其他挑战,然而本文介绍的基本技术将帮助你入门,并为开始数据分析做好准备。

  • 相关阅读:
    74基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差。
    图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)
    【前端源码解析】数据响应式原理
    一篇文章教你如何用Telerik组件为桌面应用添加上下文菜单
    不能说的秘密:加密信件
    EasyNVR调用接口获取通道信息snapURL返回为空的原因分析及解决
    (10)外观模式
    一个项目应对各式各样环境-profile完美应付
    Python常用IDE选择与安装
    idea一些debug技巧
  • 原文地址:https://blog.csdn.net/csdn1561168266/article/details/133956718