📜  检查 Pandas DataFrame 中的 NaN(1)

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

检查 Pandas DataFrame 中的 NaN

在处理大量数据时,NaN(Not a Number)是一个常见的问题。在 Pandas 中,我们经常需要检查和处理 DataFrame 中的 NaN。

检查 NaN

我们可以使用 isna() 方法来检查 DataFrame 中的 NaN。它会返回一个布尔值的 DataFrame,其中每个 NaN 值都用 True 表示。

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, None, 30],
        'gender': ['F', 'M', None]}

df = pd.DataFrame(data)

print(df.isna())

# Output:
#     name    age  gender
# 0  False  False   False
# 1  False   True   False
# 2  False  False    True

除了 isna() 方法外,我们也可以使用 isnull() 方法来检查 NaN 值。

统计 NaN

我们可以使用 sum() 方法对 DataFrame 中的 NaN 进行统计。该方法返回一个 Series,其中每个列都显示了该列的 NaN 值的数量。

print(df.isna().sum())

# Output:
# name      0
# age       1
# gender    1
# dtype: int64

我们也可以使用 count() 方法来统计非 NaN 值的数量。

print(df.count())

# Output:
# name      3
# age       2
# gender    2
# dtype: int64
删除 NaN

我们可以使用 dropna() 方法来删除 DataFrame 中包含 NaN 的行或列。

# 删除包含 NaN 值的行
df = df.dropna()
print(df)

# Output:
#     name   age gender
# 0  Alice  25.0      F

# 删除包含 NaN 值的列
df = pd.DataFrame(data)
df = df.dropna(axis=1)
print(df)

# Output:
#      name
# 0  Alice
# 1     Bob
# 2  Charlie
填充 NaN

在某些情况下,我们可能需要填充 DataFrame 中的 NaN 值。我们可以使用 fillna() 方法来实现这个目标。

# 将 DataFrame 中的 NaN 值用 0 填充
df = pd.DataFrame(data)
df = df.fillna(0)
print(df)

# Output:
#       name   age gender
# 0    Alice  25.0      F
# 1      Bob   0.0      M
# 2  Charlie  30.0      0

除了使用常数来填充 NaN 值外,我们还可以使用其他方法来填充 NaN 值,例如:使用前一个非 NaN 值、使用后一个非 NaN 值、使用平均值等等。

# 用前一个非 NaN 值填充 NaN
df = pd.DataFrame(data)
df = df.fillna(method='ffill')
print(df)

# Output:
#       name   age gender
# 0    Alice  25.0      F
# 1      Bob  25.0      M
# 2  Charlie  30.0      M

# 用平均值填充 NaN
df = pd.DataFrame(data)
df['age'] = df['age'].fillna(df['age'].mean())
print(df)

# Output:
#       name   age gender
# 0    Alice  25.0      F
# 1      Bob  27.5      M
# 2  Charlie  30.0    NaN