【Pandas】pandas DataFrame notna

Pandas2.2 DataFrame

Missing data handling

方法 描述
DataFrame.fillna([value, method, axis, ...]) 用于填充 DataFrame 中的缺失值(NaN)
DataFrame.backfill(*[, axis, inplace, ...]) 用于**使用后向填充(即"下一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.bfill(*[, axis, inplace, limit, ...]) 用于**使用后向填充(即"下一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.dropna(*[, axis, how, thresh, ...]) 用于删除包含缺失值(NaN)的行或列的方法
DataFrame.ffill(*[, axis, inplace, limit, ...]) 用于**使用前向填充(即"前一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.interpolate([method, axis, limit, ...]) 用于对缺失值(NaN)进行插值填充的方法
DataFrame.isna() 用于检测 DataFrame 中缺失值(NaN)的位置的方法
DataFrame.isnull() 用于检测 DataFrame 中缺失值(NaN)的位置的方法
DataFrame.notna() 用于检测 DataFrame 中非缺失值(即不是 NaN)的位置的方法

pandas.DataFrame.notna()

pandas.DataFrame.notna() 是一个用于检测 DataFrame 中非缺失值(即不是 NaN)的位置 的方法。它返回一个新的布尔型 DataFrame,其中每个元素表示对应位置的值是否为非空值(not NaN)


📌 方法签名
python 复制代码
DataFrame.notna()

✅ 返回值
  • 返回一个与原 DataFrame 形状相同的布尔型 DataFrame
  • 若某个位置是非空值 (即不是 NaN),则对应位置为 True
  • 否则为 False

该方法不会修改原始数据。


❌ 注意事项
  • notna() 不支持参数;
  • 它仅用于检测 NaN,不识别 None 或其他空值(如空字符串、0 等);
  • notna()isna() / isnull() 完全相反
  • 常用于过滤掉缺失值或统计有效值数量。

🧪 示例代码及结果
示例 1:基本用法
python 复制代码
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, np.nan, 3],
    'B': [np.nan, 2, np.nan],
    'C': [5, 6, 7]
})

print("Original DataFrame:")
print(df)

# 检测非空值位置
df_notna = df.notna()
print("\nAfter notna():")
print(df_notna)
输出结果:
复制代码
Original DataFrame:
     A    B  C
0  1.0  NaN  5
1  NaN  2.0  6
2  3.0  NaN  7

After notna():
      A      B     C
0  True  False  True
1  False  True  True
2  True  False  True

示例 2:统计每列的有效值数量
python 复制代码
# 统计每列非空值的数量
valid_count = df.notna().sum()
print("\nValid value count per column:")
print(valid_count)
输出结果:
复制代码
Valid value count per column:
A    2
B    1
C    3
dtype: int64

示例 3:统计整个 DataFrame 中的有效值总数
python 复制代码
total_valid = df.notna().sum().sum()
print(f"\nTotal valid values: {total_valid}")
输出结果:
复制代码
Total valid values: 6

示例 4:筛选出所有非空行(即整行都没有 NaN)
python 复制代码
# 筛选整行都非空的行
full_rows = df[df.notna().all(axis=1)]
print("\nRows with no missing values:")
print(full_rows)
输出结果:
复制代码
Rows with no missing values:
   A    B  C

因为没有任何一行是全部非空的,所以输出为空。


示例 5:筛选出至少有一个非空值的行
python 复制代码
# 筛选至少有一个非空值的行
some_valid_rows = df[df.notna().any(axis=1)]
print("\nRows with at least one valid value:")
print(some_valid_rows)
输出结果:
复制代码
Rows with at least one valid value:
     A    B  C
0  1.0  NaN  5
1  NaN  2.0  6
2  3.0  NaN  7

🧠 应用场景
场景 说明
查看有效值分布 快速了解哪些位置有有效数据
统计有效值数量 结合 sum() 计算每列/行的有效值个数
过滤含缺失值的行/列 使用 df.notna().all(axis=1) 配合布尔索引
预处理流程的一部分 判断某列是否适合填充或删除

⚠️ 补充说明
  • notna()isna() / isnull() 完全互为反义操作;
  • 对于非浮点类型列(如字符串、整数),若含有 NaN,也会被标记为 False
  • 如果你希望将 None 视为 NaN,可以先使用 df.replace([None], np.nan) 转换。

✅ 总结对比
方法 是否推荐使用 说明
notna() ✅ 推荐 更直观地表达"是否为有效值"
~isna() ✅ 推荐 notna() 等价,可用于取反操作
~isnull() ✅ 推荐 notna() 等价,兼容性考虑

你可以将 notna() 作为日常数据清洗的重要工具之一,尤其在需要保留完整记录统计有效数据量时非常有用。

相关推荐
CodeCraft Studio5 小时前
Excel处理控件Aspose.Cells教程:使用 Python 将 Pandas DataFrame 转换为 Excel
python·json·excel·pandas·csv·aspose·dataframe
njxiejing5 小时前
Pandas数据结构(DataFrame,字典赋值)
数据结构·人工智能·pandas
Calihen的学习日志1 天前
【Pandas】3.1-数据预处理:列的基本操作
python·pandas
Source.Liu2 天前
【Python自动化】 21.2 Pandas 读取 Excel 时的 dtype 参数完全指南
python·自动化·pandas
Source.Liu2 天前
【Python自动化】 21 Pandas Excel 操作完整指南
python·excel·pandas
Source.Liu2 天前
【Python自动化】 21.1 Pandas 读取 Excel 文件的完整指南
python·自动化·pandas
偷心伊普西隆4 天前
Pandas DataFrame 指南
python·数据分析·pandas
chad__chang10 天前
Pandas的数据结构
数据结构·pandas
老歌老听老掉牙12 天前
Pandas DataFrame 列数操作完全指南
python·pandas
万粉变现经纪人12 天前
如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
ide·pycharm·beautifulsoup·pandas·fastapi·pip·httpx