📅  最后修改于: 2023-12-03 14:55:42.381000             🧑  作者: Mango
在处理大量数据时,NaN(Not a Number)是一个常见的问题。在 Pandas 中,我们经常需要检查和处理 DataFrame 中的 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 值。
我们可以使用 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
我们可以使用 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
在某些情况下,我们可能需要填充 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