📌  相关文章
📜  pandas 用上面的值替换 nan - Python (1)

📅  最后修改于: 2023-12-03 14:45:04.607000             🧑  作者: Mango

用 Pandas 替换 NaN 值

在数据分析中,缺失数据是一件非常常见的事情。Pandas 提供了一系列的方法来处理缺失的值,可以让我们轻松地找出缺失值、填充缺失值和剔除缺失值。在本篇文章中,我们将探讨如何使用 Pandas 用一些特殊的值来代替 NaN 值。

找出 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 值之外,我们还可以使用常数来替换 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 值

我们还可以使用上一行/列的值来替换 NaN 值。这通常是在时间序列数据中处理缺失数据时使用的方法。我们可以使用 fillna() 函数,同时指定 method 参数为 ffillbfill 来实现。

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 值。常见的方法包括用均值、中位数或众数填充 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 值。