数据分析Pandas专栏---第五章<Pandas缺失值的处理(1)>

前言:

        当进行数据清洗处理时,缺失值处理是一个非常重要的步骤。缺失值是指在数据集中某些位置缺少数值或信息。处理缺失值的目标是确保数据的完整性和准确性,以便能够进行后续的分析和建模。

正文:

I. 简介


A. 什么是缺失值

当某个特定数据点未能被正确记录或提供时,就会产生缺失值。这可能是由于各种原因导致的,例如数据采集过程中的错误、数据提供者没有提供特定的信息,或者数据损坏等。
缺失值的表示方式有多种,最常见的是使用“NaN”(Not a Number)来表示。在 pandas 中,NaN 通常用于表示缺失值,以便于对其进行处理和识别。

B. 缺失值的影响和重要性

缺失值对数据分析和建模的影响是不可忽视的。以下是缺失值的一些重要影响和重要性:

  1. 数据完整性:缺失值可能导致数据集的不完整性,可能会使得数据集中的某些信息无法得到完整的呈现。这可能导致对数据的误解和错误的结论。
  2. 数据准确性:缺失值可能导致数据集中的某些观测结果不够准确。如果数据集中的缺失值比例很高,可能会影响对数据分析的信任程度。
  3. 统计分析和模型建立的可靠性:某些统计方法和机器学习模型对于含有缺失值的数据是敏感的,这意味着它们的输出结果可能会受到缺失值的影响。因此,在进行统计分析和模型建立之前,需要进行缺失值处理以确保结果的准确性和可靠性。
  4. 数据可视化和解释能力:在数据可视化过程中,缺失值可能会对图表或可视化结果产生一些影响,这可能会导致对数据进行解释时造成困惑。因此,在数据可视化之前,应该考虑处理缺失值,以避免它们对解释和交流的影响。


II. 检测缺失值


A. .isnull() 和 .notnull() 方法

  1. .isnull() 方法返回一个布尔值的 DataFrame,其中缺失值位置为 True,而非缺失值位置为 False。
  2. .notnull() 方法则返回与 .isnull() 相反的结果,即非缺失值位置为 True,缺失值位置为 False。
示例案例:

假设我们有一个名为 df 的数据框,其中包含一个列名为 Age 的特征,用于表示人的年龄。我们将使用 .isnull() 方法来检测缺失值。

import pandas as pd

data = {'Name': ['John', 'Mike', 'Sarah', 'Amy'],
        'Age': [25, None, 35, 42],
        'City': ['New York', 'London', None, 'Paris']}

df = pd.DataFrame(data)

print(df['Age'].isnull())

输出结果:

0    False
1     True
2    False
3    False
Name: Age, dtype: bool

在上述案例中,df['Age'].isnull() 返回一个布尔值的 Series,其中第二个位置(索引 1)为 True,表示该位置存在缺失值。

B. .info() 方法

.info() 方法用于获取有关数据框中每个列的信息,包括列名、非缺失值数量和数据类型等。

通过调用 .info() 方法,我们可以快速查看数据框中是否存在缺失值,并获取其他有关数据的基本信息。

示例案例:
import pandas as pd

data = {'Name': ['John', 'Mike', 'Sarah', 'Amy'],
        'Age': [25, None, 35, 42],
        'City': ['New York', 'London', None, 'Paris']}

df = pd.DataFrame(data)

print(df.info())

输出结果:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   Name    4 non-null      object
 1   Age     3 non-null      float64
 2   City    3 non-null      object
dtypes: float64(1), object(2)
memory usage: 224.0+ bytes
None

在上述案例中,.info() 方法返回了数据框的详细信息,包括每列的名称、非缺失值数量(Non-Null Count)和数据类型(Dtype)。根据输出结果,我们可以观察到 Age 列中有一个缺失值。

C. .describe() 方法

.describe() 方法用于生成关于数据的统计摘要,包括计数、均值、标准差、最小值、最大值等。通过调用 .describe() 方法,我们可以快速了解数据的分布情况,并检测是否存在缺失值。

示例案例:
import pandas as pd

data = {'Name': ['John', 'Mike', 'Sarah', 'Amy'],
        'Age': [25, None, 35, 42],
        'City': ['New York', 'London', None, 'Paris']}

df = pd.DataFrame(data)

print(df['Age'].describe())

输出结果:

count     3.000000
mean     34.000000
std       8.366601
min      25.000000
25%      30.000000
50%      35.000000
75%      38.500000
max      42.000000
Name: Age, dtype: float64

在上述案例中,.describe() 方法返回了针对 Age 列的统计摘要信息,包括缺失值数量(count)、平均值(mean)、标


D. 可视化方法

....(后面再讲,现在说大家理解不了)


III. 缺失值处理方法

A..dropna()

.dropna() 方法是 pandas 中用于删除缺失值的方法。

它将从数据框中删除包含缺失值的行或列,从而使得分析和建模的数据集更加干净和准确。

  1. .dropna() 方法的使用: .dropna() 方法可以应用于 pandas 的数据框或序列(Series)对象。默认情况下,它将删除包含任何缺失值的行。我们可以通过设置不同的参数来实现不同的删除方式。

下面是一些常用的 .dropna() 方法的参数和用法:

  • axis:设置为 0 表示对行进行操作(删除包含缺失值的整行),设置为 1 表示对列进行操作(删除包含缺失值的整列)。
  • how:指定在删除时使用的条件。可选的值包括 'any'(默认值,删除包含任何缺失值的行或列)和 'all'(只删除全为缺失值的行或列)。
  • subset:指定要考虑的特定列或行的标签列表。
案例

展示如何使用 .dropna() 方法删除包含缺失值的行:

import pandas as pd

data = {'Name': ['John', 'Mike', 'Sarah', 'Amy'],
        'Age': [25, None, 35, 42],
        'City': ['New York', 'London', None, 'Paris']}

df = pd.DataFrame(data)

# 删除包含缺失值的行
clean_df = df.dropna()

# 打印处理后的数据框
print(clean_df)

输出结果:

   Name   Age      City
0  John  25.0  New York

在上述示例中,我们首先创建了一个包含缺失值的数据框 df。然后,我们使用 .dropna() 方法删除了包含缺失值的行,得到了一个不包含缺失值的新数据框 clean_df

  1. 适用场景和注意事项:
场景
  1. 当缺失值的数量很少,对整体数据影响较小时,可以选择删除缺失值来保持数据完整性。
  2. 当缺失值的分布模式不规律、难以进行填充或预测时,删除缺失值可能是一个合理的选择。
  3. 当缺失值对分析或建模任务几乎没有影响时,删除缺失值可以简化数据集,减少处理复杂度。

注意事项:
  1. 删除缺失值可能导致丢失有价值的数据,因此在删除之前应该仔细考虑数据的重要性和缺失值对分析目标的影响。
  2. 在删除缺失值之前,应该先对数据进行适当的探索和分析,以确保了解缺失值的分布和模式。
  3. 在使用 .dropna() 方法时,应该注意设置适当的参数,以确保删除的行或列符合分析的要求。
  4. 删除缺失值可能导致数据样本的减少,因此需要在删除之前评估删除后的数据量是否足够支持后续的分析或建模任务。

预告下一篇2--内容提要:填充缺失值/处理特定类型的缺失值/缺失值处理的注意事项和技巧/实例和案例分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晦涩难董先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值