看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Pandas 和 NumPy 中,缺失值(NaN 或 None)参与计算时的规则会直接影响计算结果。这些规则设计是为了确保数据的完整性和逻辑性。以下是详细的讲解:
NaN 表示(float 类型),或 None(对象类型)。NaN 是特殊的,不等于任何值,包括它自身。import numpy as np
print(np.nan == np.nan)  # False
print(np.nan != np.nan)  # True
在算术运算中,任何包含 NaN 的运算结果都会是 NaN,因为 NaN 被视为“未知值”。
import pandas as pd
import numpy as np
# 示例数据
data = {'A': [1, 2, np.nan], 'B': [4, np.nan, 6]}
df = pd.DataFrame(data)
# 算术运算
print(df['A'] + df['B'])  # 加法
print(df['A'] * df['B'])  # 乘法
输出:
0    5.0
1    NaN
2    NaN
dtype: float64
0     4.0
1     NaN
2     NaN
dtype: float64
聚合函数默认会忽略缺失值,但可以通过参数修改其行为。
sum():默认忽略缺失值
print(df['A'].sum())  # 输出 3.0
mean():默认忽略缺失值
print(df['A'].mean())  # 输出 1.5
count():统计非缺失值的数量
print(df['A'].count())  # 输出 2
max() / min():默认忽略缺失值
print(df['A'].max())  # 输出 2.0
print(df['A'].min())  # 输出 1.0
通过设置 skipna=False,可以强制包含缺失值,但结果通常会是 NaN。
print(df['A'].sum(skipna=False))  # 输出 NaN
print(df['A'].mean(skipna=False))  # 输出 NaN
布尔运算中,NaN 的行为较特殊。
any() 和 all()any():只要有一个值为 True,即返回 True,忽略缺失值。all():所有值都为 True 时返回 True,忽略缺失值。print(df['A'].any())  # True,忽略 NaN
print(df['A'].all())  # False,因为不是所有值为 True
若想包括缺失值:
print(df['A'].any(skipna=False))  # NaN
print(df['A'].all(skipna=False))  # NaN
NaN 在布尔运算中会传播为 NaN。
print(df['A'] > 1)  # 输出布尔值,NaN 的位置仍为 NaN
在排序时,NaN 会被放到最后。
print(df.sort_values(by='A'))
比较操作中,NaN 始终返回 False。
print(df['A'] > 1)  # NaN 返回 NaN,而不是 True/False
NaN?NaN 不能直接用 == 或 != 判断,需使用 pd.isna() 或 np.isnan()。
print(df['A'] == np.nan)  # False
print(pd.isna(df['A']))   # 正确判断 NaN
fillna() 替换缺失值。print(df['A'].fillna(0))  # 替换为 0
dropna() 删除缺失值。print(df.dropna())
NaN 会传播为 NaN。NaN,可通过 skipna=False 修改。NaN 被视为 False 或 NaN。NaN 被视为特殊值,通常放在最后。更新时间:2024-12-05 11:36:02 标签:pandas 缺失值 计算