【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() 作为日常数据清洗的重要工具之一,尤其在需要保留完整记录 或统计有效数据量时非常有用。

相关推荐
2601_966949654 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
benchmark_cc15 小时前
如何为 QuantDash Python SDK 编写一个最小化的连接验证脚本?
python·数据分析·pandas·量化交易·股票数据·quantdash
万粉变现经纪人18 小时前
如何解决 pip install 安装报错 检测到 yanked 版本需更换可用版本 问题
人工智能·python·scrapy·numpy·pandas·pyqt·pip
烂蜻蜓1 天前
Pandas入门教程(十三):Parquet 与 Feather——高性能列式存储格式实战
pandas
gCode Teacher 格码致知1 天前
Pandas教学-21:subplots的使用
python·pandas·1024程序员节
benchmark_cc1 天前
量化开发中,什么时候应该停止手动下载股票数据?
python·数据分析·pandas·量化交易·1024程序员节·股票数据·quantdash
quantdash_cc2 天前
如何利用标的信息为研究股票池补充名称和交易所信息?
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
benchmark_cc2 天前
QuantDash 安装成功后,如何验证 Python 环境可以正常导入 SDK?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
benchmark_cc3 天前
个人量化系统搭建:如何利用 QuantDash 实现 A 股日 K 线前复权数据的高效获取与质量校验?
python·数据分析·pandas·量化交易·股票数据·quantdash
烂蜻蜓3 天前
Pandas入门教程(十二):读取 HTML 表格——read_html 参数详解与网页数据清洗
python·html·pandas