You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环在Pandas中查找各列NA并剔除含NA的行

用循环实现Pandas剔除所有含NA值的行

先还原你提供的原始DataFrame:

import pandas as pd
import numpy as np

# 构造数据字典
data = {'First Score':[100, 90, np.nan, 95],
        'Second Score': [30, 45, 56, np.nan],
        'Third Score':[np.nan, 40, 80, 98]}

# 创建DataFrame
df = pd.DataFrame(data)

循环实现的两种方式

方式1:逐行逐列遍历检查

这种方式完全贴合手动筛选的逻辑,逐个检查每一行的每一列是否存在NA:

# 初始化筛选掩码:默认所有行都保留
keep_rows = [True] * len(df)

# 遍历每一列
for col in df.columns:
    # 遍历当前列的每一行
    for idx in range(len(df)):
        # 如果当前行当前列是NA,标记为不保留
        if pd.isna(df.loc[idx, col]):
            keep_rows[idx] = False

# 应用掩码得到无NA的结果
final_df = df[keep_rows]
print(final_df)

输出结果:

First Score  Second Score  Third Score
1         90.0          45.0         40.0

方式2:结合Pandas矢量化操作的循环(更高效)

这种方式避免逐行遍历,利用Pandas的列级非NA判断更新筛选掩码,效率更高:

# 初始化掩码为全True的Series,与DataFrame索引对应
keep_rows = pd.Series([True]*len(df), index=df.index)

# 遍历每一列
for col in df.columns:
    # 保留同时满足「之前掩码为True」和「当前列非NA」的行
    keep_rows = keep_rows & df[col].notna()

# 获取最终结果
final_df = df[keep_rows]

补充:Pandas原生方法

虽然你已知其他方法,还是提一句:原生dropna()可以一步完成,逻辑和方式2一致,但无需手动写循环:

final_df = df.dropna()

内容的提问来源于stack exchange,提问作者manu p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:31:14