Python实现简单的缺失值处理(超详细教程)

目录

一、环境搭建

[1.1 Missingno](#1.1 Missingno)

[1.2 Altair](#1.2 Altair)

[1.3 SciPy](#1.3 SciPy)

[1.4 Plotly](#1.4 Plotly)

[1.5 NetworkX](#1.5 NetworkX)

[1.6 Sklearn](#1.6 Sklearn)

[1.7 Missingpy](#1.7 Missingpy)

[1.8 Wordcloud](#1.8 Wordcloud)

二、发现数据的缺失值

[2.1 下载数据集](#2.1 下载数据集)

[2.2 代码下载地址](#2.2 代码下载地址)

[2.3 发现缺失值](#2.3 发现缺失值)

[2.3.1 含义](#2.3.1 含义)

[2.3.2 代码演示](#2.3.2 代码演示)

[2.4 可视化缺失值](#2.4 可视化缺失值)

[2.4.1 益处](#2.4.1 益处)

[2.4.2 代码演示](#2.4.2 代码演示)

三、剔除缺失值

[3.1 剔除行](#3.1 剔除行)

[3.1.1 含义](#3.1.1 含义)

[3.1.2 代码演示](#3.1.2 代码演示)

[3.2 剔除列](#3.2 剔除列)

[3.2.1 好处](#3.2.1 好处)

[3.2.2 代码演示](#3.2.2 代码演示)

[四、 插补缺失值](#四、 插补缺失值)

[4.1 含义](#4.1 含义)

[4.2 可视化缺失值](#4.2 可视化缺失值)

[4.2.1 好处](#4.2.1 好处)

[4.2.2 代码演示](#4.2.2 代码演示)

[4.3 前值填充缺失值](#4.3 前值填充缺失值)

[4.3.1 好处](#4.3.1 好处)

[4.3.2 代码演示](#4.3.2 代码演示)

[4.4 后值填充缺失值](#4.4 后值填充缺失值)

[4.4.1 代码演示](#4.4.1 代码演示)

在Python中处理缺失值至关重要,因为缺失值可能导致数据分析结果出现偏差,影响模型的准确性和可靠性。如果不对缺失值进行处理,统计分析可能会产生误导性的结论,机器学习模型也可能因为数据的不完整性而无法有效学习数据中的模式。

此外,处理缺失值还有助于提升数据的质量和完整性,使数据更适合进行后续的分析和建模。通过适当的缺失值处理方法,如填充、删除或使用插值法,可以确保数据的连贯性和一致性,从而为数据科学和机器学习项目提供更坚实的基础。

一、环境搭建

1.1 Missingno

missingno是一个用于数据可视化的库,特别擅长于显示数据中的缺失值。安装命令如下:

python 复制代码
pip install missingno

结果展示:

1.2 Altair

Altair是一个声明式的统计可视化库。它简化了创建复杂、交互式和自定义的图表的过程。安装命令如下:

python 复制代码
pip install altair

结果展示:

1.3 SciPy

SciPy是一个开源的Python算法库和数学工具包。它包含了许多用于科学和技术计算的模块。安装命令如下:

python 复制代码
pip install scipy

结果展示:

1.4 Plotly

Plotly是一个用于创建交互式图表的Python库。它支持多种图表类型,并允许用户自定义图表的样式和布局。安装命令如下:

python 复制代码
pip install plotly

结果展示:

1.5 NetworkX

NetworkX是一个用于创建、操作和研究复杂网络的Python库。它支持创建无向图、有向图、多重图等多种类型的图结构。安装命令如下:

python 复制代码
pip install networkx

结果展示:

1.6 Sklearn

scikit-learn是一个用于机器学习的Python库。它提供了多种算法和数据处理工具,用于数据挖掘和数据分析。安装命令如下:

python 复制代码
pip install scikit-learn

结果展示:

1.7 Missingpy

missingpy是一个处理缺失数据的Python库。它提供了多种插补和缺失数据处理方法。安装命令如下:

python 复制代码
pip install missingpy

结果展示:

1.8 Wordcloud

wordcloud是一个用于生成词云的Python库。词云是一种文本可视化技术,用于展示文本数据中单词的频率或重要性。安装命令如下:

python 复制代码
pip install wordcloud

结果展示:

二、发现数据的缺失值

2.1 下载数据集

二手车销售数据集CSV格式文件资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/90229784

2.2 代码下载地址

Python实现简单的缺失值处理代码资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/90230801

2.3 发现缺失值

2.3.1 含义

发现缺失值在数据分析和机器学习任务中至关重要,其重要性主要体现在以下几个方面:

  1. 数据质量评估

缺失值是数据质量的一个直接指标。过多的缺失值可能意味着数据收集、记录或传输过程中存在问题,或者数据本身就是不完整的。通过发现和处理缺失值,我们可以评估数据的整体质量,并确定是否需要进一步的数据清洗或重新收集。

  1. 模型性能影响

在机器学习模型中,缺失值可能导致模型性能下降。如果模型在训练过程中没有正确处理缺失值,它们可能会引入偏差或方差,从而影响模型的准确性和泛化能力。因此,发现缺失值是确保模型性能稳定可靠的重要步骤。

  1. 避免数据偏差

缺失值可能不是随机分布的,而是与某些变量或特征相关。如果忽略这些缺失值,可能会导致数据偏差,从而影响分析结果的准确性。通过发现和处理缺失值,我们可以减少这种偏差,使分析结果更加可靠。

  1. 数据完整性

数据的完整性对于任何分析或决策都是至关重要的。缺失值可能意味着某些关键信息丢失或未被记录,这可能导致我们对数据的理解不完整。通过发现和处理缺失值,我们可以确保数据的完整性,从而做出更准确的决策。

  1. 提升数据价值

处理缺失值不仅是为了满足模型训练的需求,更是为了提升数据的整体价值。通过填补缺失值或利用缺失值进行更深入的分析,我们可以从数据中提取更多有用的信息,为业务决策提供更全面的支持。

  1. 符合数据合规性要求

在某些行业或领域,数据的完整性和准确性可能受到法律法规的约束。发现和处理缺失值是确保数据符合合规性要求的重要步骤,以避免潜在的法律风险和声誉损失。

2.3.2 代码演示

python 复制代码
import pandas as pd

df = pd.read_csv("D:/data.csv")
print(pd.isna(df).sum())

解析代码中:

python 复制代码
df = pd.read_csv("D:/data.csv")

这行代码使用Pandas的read_csv函数读取位于D:/data.csv路径的CSV文件,并将读取的数据存储在一个名为df的DataFrame对象中。DataFrame是Pandas中用于存储和操作表格数据的主要数据结构。

python 复制代码
print(pd.isna(df).sum())
  • pd.isna(df):这个函数检查df DataFrame中的每个元素是否为缺失值(NaN)。如果元素是缺失值,则返回True;否则返回False。这会返回一个与df形状相同的布尔型DataFrame,其中True表示缺失值,False表示非缺失值。
  • .sum():这个方法计算DataFrame中每列的True值(即缺失值)的数量。因为True在Pandas中被当作1处理,False被当作0处理,所以.sum()方法实际上计算的是每列中缺失值的总数。

结果展示:

2.4 可视化缺失值

2.4.1 益处

可视化缺失值操作在数据分析和数据处理中具有诸多好处,以下是对这些好处的详细归纳:

  1. 直观展示缺失值情况

通过热图、条形图、散点图等可视化手段,可以直观地展示数据集中缺失值的分布情况。这些图表使用颜色、高度或点的位置等视觉元素来表示缺失值的数量和分布,使得用户能够快速发现数据集中哪些部分存在缺失值,以及这些缺失值的模式和趋势。

  1. 提高数据分析和决策的准确性

可视化缺失值有助于用户更全面地了解数据集的质量和问题所在。通过可视化手段,用户可以快速识别出缺失值较多的变量或观测值,从而采取相应的措施进行处理,如填补缺失值、删除含有缺失值的行或列等。这有助于提高后续数据分析和决策的准确性,避免因为缺失值而导致的偏差或误判。

  1. 辅助数据清洗和处理

可视化缺失值还可以辅助用户进行数据清洗和处理工作。通过观察可视化图表,用户可以确定哪些变量或观测值需要重点关注和处理。例如,在热图中颜色较深的区域可能表示缺失值较多的变量,这些变量可能需要更详细的检查和清洗。此外,可视化手段还可以帮助用户发现缺失值之间的关联性,有助于进一步分析缺失值产生的原因,从而采取相应的数据清洗和处理策略。

  1. 提升数据分析效率

传统的缺失值检查方法可能需要用户逐行或逐列地检查数据,这种方法不仅耗时费力,而且容易出错。而通过可视化手段,用户可以在短时间内快速了解数据集中缺失值的整体情况,从而提高数据分析的效率。此外,一些高级的可视化工具还支持实时更新可视化结果,当数据集发生变化时,可视化结果也会相应地自动更新,使得用户可以快速洞察数据的变化趋势。

  1. 增强数据可视化能力

可视化缺失值是数据可视化能力的一个重要组成部分。通过学习和掌握可视化缺失值的技巧和方法,用户可以提升自己的数据可视化能力,从而更好地理解和分析数据。此外,可视化缺失值还可以与其他数据可视化方法相结合,如趋势分析、相关性分析等,为用户提供更全面、更深入的数据分析视角。

2.4.2 代码演示

python 复制代码
import pandas as pd
import missingno as msno
from matplotlib import pyplot as plt

df = pd.read_csv("D:/data.csv")
msno.matrix(df, figsize = (13, 10), width_ratios = (13, 2), color = (0.25, 0.25, 0.25))
plt.show()

解析代码:

python 复制代码
msno.matrix(df, figsize=(13, 10), width_ratios=(13, 2), color=(0.25, 0.25, 0.25))
  • df: 这是您要可视化的Pandas DataFrame对象,其中包含了您想要检查缺失值的数据。

  • figsize=(13, 10): 这个参数指定了生成的图形的尺寸(宽度和高度),单位为英寸。在这个例子中,图形的宽度被设置为13英寸,高度被设置为10英寸。

  • width_ratios=(13, 2): 这个参数在标准的 msno.matrix 函数调用中并不直接适用,因为 msno.matrix 函数通常不接受一个名为 width_ratios 的参数。width_ratios 通常用于在matplotlib的 GridSpecsubplots 布局中指定子图之间的宽度比例。如果您想要在 msno.matrix 生成的图形旁边添加额外的图表或注释,并且想要控制它们的宽度比例,您可能需要使用matplotlib的高级功能来自定义布局,而不是直接通过 msno.matrix 函数。不过,msno.matrix 函数内部可能会使用类似的机制来调整其内部组件的布局,但这通常对用户是透明的。

  • color=(0.25, 0.25, 0.25): 这个参数指定了热图中缺失值单元格的颜色。颜色是以RGB(红、绿、蓝)格式指定的,每个颜色的值都在0到1之间。在这个例子中,所有三个颜色通道都被设置为0.25,这将生成一个相对较暗的灰色。

结果展示:

三、剔除缺失值

3.1 剔除行

3.1.1 含义

剔除缺失值(Dropping missing values)在数据处理和分析中指的是从数据集中移除那些包含缺失或空值(NaN、None、空字符串等)的记录或特征。这通常是为了确保数据的完整性和一致性,以便进行后续的数据分析、建模或可视化。

缺失值可能由于各种原因而产生,比如数据收集过程中的错误、设备故障、受访者未回答某些问题等。在数据分析之前,处理这些缺失值是非常重要的,因为缺失值可能会影响分析结果的准确性和可靠性。

剔除缺失值的方法主要有两种:

  1. 删除含有缺失值的行或列
    • 删除行:如果数据集中的某一行包含缺失值,可以删除整行。这适用于行数据相对独立,且缺失值不多的情况。
    • 删除列:如果某一列包含大量缺失值,或者该列对于分析目标不重要,可以删除整列。
  2. 填充缺失值
    • 另一种处理缺失值的方法是使用某种策略来填充它们,比如使用均值、中位数、众数、前一个/后一个观测值、插值方法或基于模型的方法(如回归、K近邻等)来估算缺失值。

剔除缺失值的具体策略应根据数据的性质、分析目标和缺失值的产生原因来确定。在某些情况下,简单地删除含有缺失值的记录可能会导致信息的大量丢失,特别是当缺失值不是随机分布时。因此,在决定剔除缺失值之前,通常需要对缺失值的模式进行探索和分析,以了解它们是否可能引入偏差。

3.1.2 代码演示

python 复制代码
import pandas as pd
import missingno as msno
from matplotlib import pyplot as plt

df = pd.read_csv("D:/data.csv")
f1 = df.dropna(axis = 0)
print(f1.info())

代码解析:

python 复制代码
f1 = df.dropna(axis=0)
  • df:代表一个Pandas DataFrame对象,即您想要处理的数据集。

  • dropna():是Pandas提供的一个函数,旨在移除数据中的缺失值。

  • axis=0:此参数指定了操作的轴向。在Pandas中,axis=0代表按行操作(默认值),意味着函数会检查每一行,若某行含有缺失值,则整行会被移除。相反,axis=1代表按列操作,会检查每一列,并移除含有缺失值的列。由于在此代码中未改变axis的默认值(即axis=0),因此它会移除所有含有缺失值的行。

结果展示:

3.2 剔除列

3.2.1 好处

剔除缺失值在数据处理和分析过程中具有多重好处,这些好处主要体现在以下几个方面:

1. 提高数据质量

缺失值可能代表数据收集或记录过程中的错误、遗漏或异常。通过剔除这些缺失值,可以确保数据集的完整性和准确性,从而提高后续分析或建模的可靠性。

2. 减少偏差和误差

缺失值可能不是随机分布的,它们可能集中在某些特定群体或条件下。如果不加以处理,这些缺失值可能导致分析结果产生偏差,从而影响决策的准确性和有效性。通过剔除缺失值,可以减少这种偏差,使分析结果更加接近真实情况。

3. 提高算法性能

在机器学习和数据挖掘中,许多算法都对缺失值敏感。缺失值可能导致算法性能下降,甚至引发错误。通过剔除缺失值,可以提高算法的稳定性和准确性,从而获得更好的预测或分类结果。

4. 简化分析过程

缺失值处理是一个复杂且耗时的过程。通过剔除缺失值,可以简化数据分析的流程,减少处理时间和成本。此外,剔除缺失值还可以使数据更加整洁和易于理解,便于后续的分析和可视化。

5. 增强数据一致性

在数据集中,缺失值可能代表不同的含义或情况。通过剔除这些缺失值,可以确保数据集内部的一致性,使不同变量之间的关系更加清晰和明确。

3.2.2 代码演示

python 复制代码
import pandas as pd
import missingno as msno
from matplotlib import pyplot as plt

df = pd.read_csv("D:/data.csv")
f2 = df.dropna(axis = 1)
print(f2.info())

代码解析:

python 复制代码
f2 = df.dropna(axis = 1)
  • df:这是一个Pandas DataFrame对象,代表您想要处理的数据集。
  • dropna():这是Pandas提供的一个函数,旨在删除数据中的缺失值。
  • axis=1:此参数指定了操作的轴向。在Pandas中,axis=0代表按行操作(这是默认值),而axis=1则代表按列操作。因此,设置axis=1意味着函数会检查DataFrame的每一列,并删除那些包含至少一个缺失值的列。

结果展示:

四、 插补缺失值

4.1 含义

插补缺失值是指在数据处理过程中,对于数据集中存在的缺失或空白值,采用一定的方法或策略进行填补的过程。这些缺失值可能由于各种原因产生,如数据收集过程中的遗漏、设备故障、数据录入错误等。插补缺失值的目的是保持数据的完整性和一致性,以便进行后续的数据分析和建模。

插补缺失值的方法多种多样,以下是一些常见的方法:

  1. 简单插补法

    1. 均值/中位数/众数插补:对于数值型数据,可以使用该属性的均值、中位数或众数来填补缺失值。这种方法简单易行,但可能无法完全反映数据的真实分布。
    2. 条件平均值填充:在均值插补的基础上,考虑样本的同质性,以具有某种相同属性的子样本的平均值来插补。这种方法更能反映数据的局部特征。
    3. 特殊值插补:以统一的参考值、标准值或特殊值替换缺失值。这种方法适用于具有明确规则或硬性要求的场景。
  2. 高级插补法

    • 最近邻插补:根据缺失样本与其他样本的相似度(如距离),找到最相似的K个样本,以其属性值的加权平均值来填补缺失值。这种方法考虑了样本之间的关系,插补结果更为可靠。
    • 回归插补:利用已知的数据点构建回归方程,将已知属性值代入方程来估计未知属性值,并以此估计值进行填充。这种方法适用于变量之间存在线性关系的场景。
    • 多重插补:创建多个包含不同插补值的完整数据集,每个数据集都是对原始数据中缺失值的估计和模拟填补得到的。然后对每个数据集进行独立分析,最后汇总分析结果以获得最终的统计推断。这种方法考虑了缺失值的不确定性,插补结果更为准确。
    • 机器学习方法:利用机器学习算法(如决策树、随机森林、支持向量机等)来预测缺失值。这些方法能够充分利用数据的内在关联性,通过学习已有数据的模式来预测缺失值。
  3. 不处理:在某些情况下,如果缺失值对数据分析结果的影响较小,或者算法已经提供了处理缺失值的策略(如C4.5决策树采用概率权重的方法处理缺失值),则可以选择不处理缺失值。

4.2 可视化缺失值

4.2.1 好处

可视化剔除缺失值的好处主要体现在数据分析和数据可视化的过程中。以下是详细的好处分析:

1. 提高数据质量

  • 完整性:通过剔除缺失值,可以确保数据集的完整性,避免因为缺失值而导致的分析偏差。

  • 准确性:剔除缺失值后,数据集更加准确,因为不再包含那些由于各种原因(如数据收集错误、设备故障等)而缺失的值。

2. 提升可视化效果

  • 清晰度:在可视化过程中,剔除缺失值可以使图表更加清晰,因为不再需要为缺失值预留空间或采用特殊的标记方式。

  • 可读性:缺失值可能会影响图表的解读,因为它们可能代表未知或异常的数据点。剔除这些值后,图表的可读性得到提高,使得分析人员能够更容易地理解数据。

3. 优化数据分析流程

  • 减少计算量:在数据分析过程中,处理缺失值可能需要额外的计算资源。通过剔除缺失值,可以减少计算量,提高分析效率。

  • 避免误导:在某些情况下,缺失值可能会被误认为是有效的数据点,从而导致分析结果的误导。剔除这些值可以避免这种误导,使分析结果更加可靠。

4. 增强模型性能

  • 提高模型准确性:在训练机器学习模型时,缺失值可能会导致模型性能下降。通过剔除缺失值,可以提高模型的准确性,因为模型不再受到这些未知或异常数据点的影响。

  • 减少过拟合风险:缺失值可能会导致模型过拟合,因为模型可能会尝试拟合这些未知或异常的数据点。剔除这些值可以减少过拟合的风险,使模型更加泛化。

4.2.2 代码演示

python 复制代码
import pandas as pd
import missingno as msno
from matplotlib import pyplot as plt
# 图像中文显示问题
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set(font = "Kaiti", style = "ticks", font_scale = 1.4)

df = pd.read_csv("D:/data.csv")
plt.figure(figsize = (13, 10))
plt.scatter(df.kilometers, df.price_in_aed, color = "red")
plt.grid(True)
plt.xlabel("kilometers")
plt.ylabel("price_in_aed")
plt.title("剔除该信息的行")
plt.show()

代码解析:

python 复制代码
plt.scatter(df.kilometers, df.price_in_aed, color = "red")
  • plt.scatter() 是Matplotlib库中用于绘制散点图的函数。
  • df.kilometers 是DataFrame df 中的一个列,代表每个数据点的x轴坐标(这里假设是汽车的行驶里程)。
  • df.price_in_aed 是DataFrame df 中的另一个列,代表每个数据点的y轴坐标(这里假设是汽车在阿联酋迪拉姆的价格)。
python 复制代码
plt.grid(True)
  • plt.grid() 函数用于添加网格线到图表中。
  • True 参数表示启用网格线。

结果展示:

4.3 前值填充缺失值

4.3.1 好处

填充缺失值在数据处理和分析中具有多方面的好处,以下是详细的分析:

1. 保持数据完整性

填充缺失值可以确保数据集的完整性,避免因缺失值而导致的分析偏差。在数据分析和建模过程中,完整的数据集通常能够提供更准确和可靠的结果。

2. 提高数据质量

通过填充缺失值,可以提高数据的质量。缺失值可能代表未知或异常的数据点,如果不进行处理,可能会影响数据分析的准确性和可靠性。填充缺失值后,数据集更加准确,能够更真实地反映实际情况。

3. 优化数据分析流程

填充缺失值可以简化数据分析流程,减少处理缺失值所需的额外步骤和时间。在数据分析过程中,处理缺失值通常需要额外的计算资源和时间。通过填充缺失值,可以避免这些额外的计算,提高分析效率。

4. 提升模型性能

在机器学习领域,填充缺失值可以提升模型的性能。缺失值可能会导致模型无法准确拟合数据,从而降低模型的预测能力。通过填充缺失值,可以使模型更好地拟合数据,提高模型的准确性和泛化能力。

5. 避免信息损失

删除缺失值可能会导致信息的丢失,特别是当缺失值占比较大或者缺失值的分布不随机时。填充缺失值可以保留原始数据中的信息,同时有效地处理缺失值,避免信息损失。

6. 保持数据分布一致性

使用合适的方法填充缺失值(如中位数填充)可以保持数据的整体分布特征,这对于某些机器学习算法(如决策树或支持向量机)可能特别重要。这些算法可能对数据分布的改变比较敏感,保持数据分布一致性可以提高算法的性能。

7. 减少数据偏倚

如果数据中存在离群值或者极端值,使用均值来填充缺失值可能会受到这些值的影响而产生较大的偏差。而使用中位数等更稳健的统计量来填充缺失值,可以减少这种偏差的影响,使结果更加稳健。

8. 可视化效果更佳

在数据可视化过程中,填充缺失值可以使图表更加清晰和易于理解。缺失值可能会导致图表中的空白或断点,影响图表的连贯性和可读性。通过填充缺失值,可以消除这些空白和断点,使图表更加完整和连贯。

4.3.2 代码演示

python 复制代码
import pandas as pd
import missingno as msno
from matplotlib import pyplot as plt
# 图像中文显示问题
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set(font = "Kaiti", style = "ticks", font_scale = 1.4)

df = pd.read_csv("D:/data.csv")
dex = pd.isna(df.kilometers) | pd.isna(df.price_in_aed)
f3 = df.fillna(axis = 0, method = "ffill")
plt.figure(figsize = (10,10))
plt.scatter(f3.kilometers[~dex], f3.price_in_aed[~dex], c = "blue", marker = "o", label = "非缺失值")
plt.scatter(f3.kilometers[dex], f3.price_in_aed[dex], c = "red", marker = "s", label = "缺失值")
plt.grid()
plt.legend(loc = "upper right", fontsize = "12")
plt.xlabel("kilometers")
plt.ylabel("price in aed")
plt.title("填充缺失值")
plt.show()

代码解析:

python 复制代码
dex = pd.isna(df.kilometers) | pd.isna(df.price_in_aed)

这行代码创建了一个布尔索引dex,用于标识df数据集中kilometers列或price_in_aed列中存在缺失值的行。pd.isna()函数用于检测缺失值,返回布尔值(True表示缺失,False表示非缺失)。|是逻辑或操作符,表示如果任一列中存在缺失值,则对应行的dex值为True。

python 复制代码
f3 = df.fillna(axis = 0, method = "ffill")

这行代码使用前向填充(forward fill)的方法填充df数据集中的缺失值。fillna()函数用于填充缺失值,axis = 0表示按行填充(这是默认值,实际上可以省略),method = "ffill"指定填充方法为前向填充,即用前一个非缺失值填充缺失值。如果第一行就是缺失的,那么这一行将保持缺失(除非使用其他方法处理)。需要注意的是,这里f3是一个新的DataFrame,它是df的一个副本,其中的缺失值已被填充。

python 复制代码
plt.figure(figsize = (10,10))

这行代码使用matplotlib的pyplot模块创建一个新的图形窗口,并设置图形的大小为10x10英寸。

python 复制代码
plt.scatter(f3.kilometers[~dex], f3.price_in_aed[~dex], c = "blue", marker = "o", label = "非缺失值")

这行代码绘制一个散点图,显示f3数据集中kilometers列和price_in_aed列的非缺失值(即dex为False的行)。~dexdex的逻辑非操作,表示非缺失值的行。c = "blue"设置点的颜色为蓝色,marker = "o"设置点的形状为圆圈,label = "非缺失值"设置图例标签。

python 复制代码
plt.scatter(f3.kilometers[dex], f3.price_in_aed[dex], c = "red", marker = "s", label = "缺失值")

这行代码尝试绘制另一个散点图,显示填充后的kilometers列和price_in_aed列中原本为缺失值的点(即dex为True的行)。然而,这里有一个逻辑错误:由于在第2行代码中已经使用前向填充处理了缺失值,因此f3.kilometers[dex]f3.price_in_aed[dex]实际上已经不再是缺失值,而是被填充后的值。这行代码实际上绘制的是填充后的值,而不是原始的缺失值。正确的做法应该是绘制原始数据集df中这些缺失值的位置(但这在数值上是不可能的,因为缺失值没有数值),或者省略这一步,因为填充后的值已经在第一个散点图中表示了。

python 复制代码
plt.grid()

这行代码在图形上添加网格线,以便更容易地阅读和理解散点图。

python 复制代码
plt.legend(loc = "upper right", fontsize = "12")

这行代码添加图例,并设置图例的位置在图形的右上角,字体大小为12。图例用于标识散点图中不同颜色或形状的点所代表的数据集或类别。

结果展示:

4.4 后值填充缺失值

4.4.1 代码演示

python 复制代码
import pandas as pd
import missingno as msno
from matplotlib import pyplot as plt
# 图像中文显示问题
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set(font = "Kaiti", style = "ticks", font_scale = 1.4)

df = pd.read_csv("D:/data.csv")
dex = pd.isna(df.kilometers) | pd.isna(df.price_in_aed)
f3 = df.fillna(axis = 0, method = "bfill")
plt.figure(figsize = (10,10))
plt.scatter(f3.kilometers[~dex], f3.price_in_aed[~dex], c = "blue", marker = "o", label = "非缺失值")
plt.scatter(f3.kilometers[dex], f3.price_in_aed[dex], c = "red", marker = "s", label = "缺失值")
plt.grid()
plt.legend(loc = "upper right", fontsize = "12")
plt.xlabel("kilometers")
plt.ylabel("price in aed")
plt.title("填充缺失值")
plt.show()

代码解析:

python 复制代码
f3 = df.fillna(axis=0, method="bfill")
  • .fillna(): 这是Pandas DataFrame对象的一个方法,用于填充DataFrame中的缺失值。

  • axis=0: 这个参数指定了填充缺失值的方向。axis=0(默认值)表示按列填充,即对于每一列,如果该列中有缺失值,就使用某种方法(在这个例子中是"bfill")来填充这些缺失值。注意,虽然"按列填充"是axis=0的直观解释,但实际上fillna()在处理时是将DataFrame看作一系列列(Series),然后分别对这些列应用填充方法。在这个上下文中,"按列"更多的是指对每一列独立进行操作,而不是跨列进行操作。对于method="bfill"来说,填充的方向实际上是在每一列内部从上到下(或说从前到后,如果将其视为一个序列)进行的,但因为我们是按列操作的,所以这里的axis=0主要是指定操作的粒度是列级别。

  • method="bfill": 这个参数指定了填充缺失值的具体方法。"bfill"是"backward fill"的缩写,意味着使用下一个非缺失值来填充缺失值。如果一行(或说,在处理单个列时,一个元素)后面没有非缺失值了,那么该缺失值将不会被填充(它仍然会是NaN)。

结果展示:

上一篇文章:Python的Matplotlib库应用(超详细教程)-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/144900714下一篇文章:Python实现鸢尾花数据集可视化分析(超详细教程)-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/144978793?spm=1001.2014.3001.5502

相关推荐
NoneCoder3 分钟前
JavaScript系列(24)--内存管理机制详解
开发语言·javascript·ecmascript
Pafey4 分钟前
c++ 中的容器 vector、deque 和 list 的区别
开发语言·c++
ShyTan18 分钟前
java项目启动时,执行某方法
java·开发语言
甄同学28 分钟前
【WPS】【WORD&WORD】【JavaScript】实现微软WORD自动更正的效果
开发语言·前端·javascript
hnmpf32 分钟前
flask_sqlalchemy relationship 子表排序
后端·python·flask
Quantum&Coder32 分钟前
Swift语言的数据库编程
开发语言·后端·golang
疯狂学习GIS43 分钟前
互联网大中小厂实习面经:滴滴、美团、货拉拉、蔚来、信通院等
c++·python
YYHYJX1 小时前
C#学习笔记 --- 简单应用
开发语言·学习·c#
Clockwiseee1 小时前
JAVA多线程学习
java·开发语言·学习
Nobita Chen1 小时前
Python实现windows自动关机
开发语言·windows·python