如何筛选DataFrame中仅单一列非空的行?
解决方法
不需要逐个列检查其余所有列,有更简洁的写法,核心思路是先筛选出每行仅含一个非空值的行,再按非空列拆分:
步骤1:筛选符合条件的行
先计算每行非空值的数量,筛选出数量等于1的行:
import pandas as pd import numpy as np # 示例DataFrame df = pd.DataFrame({ 'A': [1, np.nan, np.nan, 4], 'B': [np.nan, 2, np.nan, np.nan], 'C': [np.nan, np.nan, 3, np.nan] }) # 筛选每行仅一个非空值的行 single_non_null_subset = df[df.notna().sum(axis=1) == 1]
步骤2:按非空列拆分子DataFrame
用字典推导快速生成每个列对应的子DataFrame(仅保留该列非空的行):
# 生成各列对应的子DataFrame字典 sub_dfs = { col: single_non_null_subset[single_non_null_subset[col].notna()] for col in df.columns }
验证结果
比如sub_dfs['A']会返回仅A列非空的行:
A B C 0 1.0 NaN NaN 3 4.0 NaN NaN
这种写法既简洁又高效,避免了手动为每个列编写“其余列全为空”的复杂条件,尤其适合列数较多的DataFrame。
内容的提问来源于stack exchange,提问作者Ramy
相关产品推荐
相关产品推荐

