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

Pandas多条件删除DataFrame行失效问题求助

解决Pandas按条件删除行无效的问题

你的代码没生效主要有两个核心问题:

  1. 错误用字符串'NaN'匹配缺失值:Pandas里的缺失值是pd.NA/np.nan(不是字符串格式的'NaN'),直接用age == 'NaN'找不到任何符合条件的行。
  2. age列类型未正确解析:你的数据中age存在32,5这种用逗号当小数点的格式,默认读取会把age识别为object(字符串)类型,不仅处理缺失值麻烦,后续数值分析也会受影响。

修复步骤

1. 正确读取数据

读取时指定decimal=',',让Pandas把逗号解析为小数点,自动将age转为数值类型,同时识别缺失值:

import pandas as pd

full_dataset_withNames = pd.read_csv('full_dataset_with_names.csv', sep=';', decimal=',')

2. 按条件删除行

用.isna()判断缺失值,结合布尔索引完成删除,两种写法任选:

  • 写法一(用drop):
df_new = full_dataset_withNames.drop(
    full_dataset_withNames[(full_dataset_withNames['sex'] == 'male') & full_dataset_withNames['age'].isna()].index
)
  • 写法二(直接筛选保留行,更简洁):
# ~表示取反,保留"不是男性 或 age不缺失"的行
df_new = full_dataset_withNames[~((full_dataset_withNames['sex'] == 'male') & full_dataset_withNames['age'].isna())]

特殊情况处理

如果确实需要保留age为object类型,先查看age列的缺失值实际格式(比如是空字符串''),再调整判断条件:

# 假设缺失值是空字符串
df_new = full_dataset_withNames[~((full_dataset_withNames['sex'] == 'male') & (full_dataset_withNames['age'] == ''))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:30:49