看过来
《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 缺失值 计算