📅  最后修改于: 2023-12-03 14:45:04.607000             🧑  作者: Mango
在数据分析中,缺失数据是一件非常常见的事情。Pandas 提供了一系列的方法来处理缺失的值,可以让我们轻松地找出缺失值、填充缺失值和剔除缺失值。在本篇文章中,我们将探讨如何使用 Pandas 用一些特殊的值来代替 NaN 值。
首先,让我们看看如何在 Pandas 中找到 NaN 值。我们可以使用 isna()
或 isnull()
函数来找到 DataFrame 或 Series 中的 NaN 值。这些函数会返回一个布尔值的 DataFrame 或 Series,其中值为 True 表示对应的位置是 NaN 值。
import pandas as pd
import numpy as np
# 创建一个包含 NaN 值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, 8],
'C': [9, 10, 11, np.nan]})
print(df)
# 找到 DataFrame 中的 NaN 值
print(df.isna())
# 找到 Series 中的 NaN 值
print(df['A'].isna())
输出:
A B C
0 1.0 5.0 9.0
1 2.0 NaN 10.0
2 NaN 7.0 11.0
3 4.0 8.0 NaN
A B C
0 False False False
1 False True False
2 True False False
3 False False True
0 False
1 False
2 True
3 False
Name: A, dtype: bool
除了删除或填充 NaN 值之外,我们还可以使用常数来替换 NaN 值。比如说,我们要将 DataFrame 中所有的 NaN 值替换成 -1,可以使用 fillna()
函数。
# 将 DataFrame 中的 NaN 值替换成 -1
df2 = df.fillna(-1)
print(df2)
输出:
A B C
0 1.0 5.0 9.0
1 2.0 -1.0 10.0
2 -1.0 7.0 11.0
3 4.0 8.0 -1.0
我们还可以使用上一行/列的值来替换 NaN 值。这通常是在时间序列数据中处理缺失数据时使用的方法。我们可以使用 fillna()
函数,同时指定 method
参数为 ffill
或 bfill
来实现。
ffill
(或 pad
)参数意味着用前面的有效值填充 NaN 值,而 bfill
(或 backfill
)参数则意味着用后面的有效值填充 NaN 值。这些参数可以应用于整个 DataFrame 或 Series,也可以应用于特定的轴。
# 将 DataFrame 中 NaN 值用前面的有效值替换
df3 = df.fillna(method='ffill')
print(df3)
# 将 Series 中 NaN 值用后面的有效值替换
df['A'] = df['A'].fillna(method='bfill')
print(df)
输出:
A B C
0 1.0 5.0 9.0
1 2.0 5.0 10.0
2 2.0 7.0 11.0
3 4.0 8.0 11.0
A B C
0 1.0 5.0 9.0
1 2.0 NaN 10.0
2 4.0 7.0 11.0
3 4.0 8.0 NaN
我们还可以使用数据的统计量来替换 NaN 值。常见的方法包括用均值、中位数或众数填充 NaN 值。
# 用 Series 的均值填充 NaN 值
df['B'] = df['B'].fillna(df['B'].mean())
print(df)
# 用 DataFrame 中一列的中位数填充 NaN 值
df['A'] = df['A'].fillna(df['A'].median())
print(df)
# 用 DataFrame 中一列的众数填充 NaN 值
df['C'] = df['C'].fillna(df['C'].mode().iloc[0])
print(df)
输出:
A B C
0 1.0 5.0 9.0
1 2.0 7.5 10.0
2 3.0 7.0 11.0
3 4.0 8.0 10.0
A B C
0 1.0 5.0 9.0
1 2.0 7.5 10.0
2 2.5 7.0 11.0
3 4.0 8.0 10.0
A B C
0 1.0 5.0 9.0
1 2.0 7.5 10.0
2 2.5 7.0 11.0
3 4.0 8.0 10.0
总之,Pandas 提供了多种方法来处理缺失的值。根据具体的情况,我们可以选择不同的方法来找出、填充或删除 NaN 值。