Pandas多条件删除DataFrame行失效问题求助
解决Pandas按条件删除行无效的问题
你的代码没生效主要有两个核心问题:
- 错误用字符串'NaN'匹配缺失值:Pandas里的缺失值是
pd.NA/np.nan(不是字符串格式的'NaN'),直接用age == 'NaN'找不到任何符合条件的行。 - 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
相关产品推荐
相关产品推荐

