基于NaN条件筛选Pandas DataFrame行:生成df2与df3
Pandas筛选指定列全为NaN的行
输入DataFrame
name value1 value2 value3 value4 value5 value6 value7 value8 value9 0 58390 28.4 32.2 31.3 30.6 40.7 40.0 39.6 40.10 NaN 1 58395 31.4 32.8 31.5 31.9 NaN NaN NaN 38.60 NaN 2 67488 NaN NaN NaN 26.6 NaN NaN NaN 34.90 NaN 3 67490 NaN NaN NaN 29.9 NaN NaN NaN 39.65 NaN 4 67501 NaN NaN NaN 20.5 NaN NaN NaN 27.10 NaN
解决方案代码
import pandas as pd # 生成df2:保留value1、value2、value3均为NaN的行 df2 = df[df[['value1', 'value2', 'value3']].isna().all(axis=1)] df2 = df2.reset_index(drop=True) # 重置索引匹配预期输出格式 # 生成df3:保留value5、value6、value7均为NaN的行 df3 = df[df[['value5', 'value6', 'value7']].isna().all(axis=1)] df3 = df3.reset_index(drop=True)
代码逻辑说明
df[列名列表].isna():生成布尔DataFrame,标记对应位置是否为缺失值(NaN).all(axis=1):按行校验,仅当该行指定列全为True(即全是NaN)时返回True- 用上述布尔Series筛选原DataFrame,即可得到符合条件的行
reset_index(drop=True):重置结果索引,让输出格式与预期一致(可选操作)
预期输出
df2
name value1 value2 value3 value4 value5 value6 value7 value8 value9 0 67488 NaN NaN NaN 26.6 NaN NaN NaN 34.90 NaN 1 67490 NaN NaN NaN 29.9 NaN NaN NaN 39.65 NaN 2 67501 NaN NaN NaN 20.5 NaN NaN NaN 27.10 NaN
df3
name value1 value2 value3 value4 value5 value6 value7 value8 value9 0 58395 31.4 32.8 31.5 31.9 NaN NaN NaN 38.60 NaN 1 67488 NaN NaN NaN 26.6 NaN NaN NaN 34.90 NaN 2 67490 NaN NaN NaN 29.9 NaN NaN NaN 39.65 NaN 3 67501 NaN NaN NaN 20.5 NaN NaN NaN 27.10 NaN
内容的提问来源于stack exchange,提问作者user20777609
相关产品推荐
相关产品推荐

