如何获取pandas dropna操作删除的含NaN值的行数据
实现方法
核心思路:在执行weight列的空值删除操作前,提前筛选出会被删除的行单独存储,再执行原有删除逻辑,不会改变你原有代码的过滤结果。
你原有代码前两步执行完后,df_weight已经完成了age、height列的空值过滤,此时所有weight列为空的行,就是第三步dropna会删除的行,直接按这个逻辑提取即可:
# 原有前两步过滤逻辑保持不变 df_weight.dropna(subset = ["age"], inplace=True) df_weight.dropna(subset = ["height"], inplace=True) # 提前提取第三步要删除的行:weight列为NaN的记录 removed_weight_rows = df_weight[df_weight["weight"].isna()].copy() # 执行原有第三步删除操作 df_weight.dropna(subset = ["weight"], inplace=True)
说明
- 提取被删行时加
.copy()是为了规避pandas的链式索引警告,后续你对removed_weight_rows做修改、存表等操作都不会触发异常 - 最终
removed_weight_rows就是你需要的、执行第三步删除时被移除的行组成的新表,可以直接导出或做后续分析
如果不想提前筛选,也可以通过索引差集的方式实现,效果完全一致:
# 前两步过滤不变 df_weight.dropna(subset = ["age"], inplace=True) df_weight.dropna(subset = ["height"], inplace=True) # 记录删除前的索引,执行非inplace的dropna后找差集 original_index = df_weight.index df_weight = df_weight.dropna(subset = ["weight"]) removed_weight_rows = df_weight.loc[original_index.difference(df_weight.index)]
第一种写法逻辑更直观,不容易出索引匹配错误,优先推荐使用。
内容的提问来源于stack exchange,提问作者Blackhole
相关产品推荐
相关产品推荐

