前言:
当进行数据清洗 和处理 时,缺失值处理 是一个非常重要的步骤。缺失值是指在数据集中某些位置缺少数值或信息。处理缺失值的目标是确保数据的完整性和准确性,以便能够进行后续的分析和建模。
正文:
I. 简介
A. 什么是缺失值
当某个特定数据点未能被正确记录或提供时,就会产生缺失值。这可能是由于各种原因导致的,例如数据采集过程中的错误、数据提供者没有提供特定的信息,或者数据损坏等。
缺失值的表示方式有多种,最常见的是使用"NaN"(Not a Number)来表示。在 pandas 中,NaN 通常用于表示缺失值,以便于对其进行处理和识别。
B. 缺失值的影响和重要性
缺失值对数据分析和建模的影响是不可忽视的。以下是缺失值的一些重要影响和重要性:
- 数据完整性:缺失值可能导致数据集的不完整性,可能会使得数据集中的某些信息无法得到完整的呈现。这可能导致对数据的误解和错误的结论。
- 数据准确性:缺失值可能导致数据集中的某些观测结果不够准确。如果数据集中的缺失值比例很高,可能会影响对数据分析的信任程度。
- 统计分析和模型建立的可靠性:某些统计方法和机器学习模型对于含有缺失值的数据是敏感的,这意味着它们的输出结果可能会受到缺失值的影响。因此,在进行统计分析和模型建立之前,需要进行缺失值处理以确保结果的准确性和可靠性。
- 数据可视化和解释能力:在数据可视化过程中,缺失值可能会对图表或可视化结果产生一些影响,这可能会导致对数据进行解释时造成困惑。因此,在数据可视化之前,应该考虑处理缺失值,以避免它们对解释和交流的影响。
II. 检测缺失值
A. .isnull() 和 .notnull() 方法
.isnull()
方法返回一个布尔值的 DataFrame,其中缺失值位置为 True,而非缺失值位置为 False。- **
.notnull()
**方法则返回与.isnull()
相反的结果,即非缺失值位置为 True,缺失值位置为 False。
示例案例:
假设我们有一个名为 df
的数据框,其中包含一个列名为 Age
的特征,用于表示人的年龄。我们将使用 .isnull()
方法来检测缺失值。
python
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()
方法,我们可以快速查看数据框中是否存在缺失值,并获取其他有关数据的基本信息。
示例案例:
python
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()
方法,我们可以快速了解数据的分布情况,并检测是否存在缺失值。
示例案例:
python
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 中用于删除缺失值的方法。
它将从数据框中删除包含缺失值的行或列,从而使得分析和建模的数据集更加干净和准确。
.dropna()
方法的使用:.dropna()
方法可以应用于 pandas 的数据框或序列(Series)对象。默认情况下,它将删除包含任何缺失值的行。我们可以通过设置不同的参数来实现不同的删除方式。
下面是一些常用的 .dropna()
方法的参数和用法:
axis
:设置为 0 表示对行进行操作(删除包含缺失值的整行),设置为 1 表示对列进行操作(删除包含缺失值的整列)。how
:指定在删除时使用的条件。可选的值包括 'any'(默认值,删除包含任何缺失值的行或列)和 'all'(只删除全为缺失值的行或列)。subset
:指定要考虑的特定列或行的标签列表。
案例
展示如何使用 .dropna()
方法删除包含缺失值的行:
python
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
。
适用场景和注意事项:
场景
- 当缺失值的数量很少,对整体数据影响较小时,可以选择删除缺失值来保持数据完整性。
- 当缺失值的分布模式不规律、难以进行填充或预测时,删除缺失值可能是一个合理的选择。
- 当缺失值对分析或建模任务几乎没有影响时,删除缺失值可以简化数据集,减少处理复杂度。
注意事项:
- 删除缺失值可能导致丢失有价值的数据,因此在删除之前应该仔细考虑数据的重要性和缺失值对分析目标的影响。
- 在删除缺失值之前,应该先对数据进行适当的探索和分析,以确保了解缺失值的分布和模式。
- 在使用
.dropna()
方法时,应该注意设置适当的参数,以确保删除的行或列符合分析的要求。 - 删除缺失值可能导致数据样本的减少,因此需要在删除之前评估删除后的数据量是否足够支持后续的分析或建模任务。
预告下一篇2--内容提要:填充缺失值/处理特定类型的缺失值/缺失值处理的注意事项和技巧/实例和案例分析