如何在Sheet_Name为Gdg时删除Course列NaN行?代码报错求解
删除DataFrame中特定条件的行
需求
删除DataFrame里满足以下条件的行:当Sheet_Name列的值为Gdg时,Course列存在空值(NaN)。
示例数据
Course Sheet_Name NaN Gdg course 1 Gdg course 2 ret NaN ret
期望结果
Course Sheet_Name course 1 Gdg course 2 ret NaN ret
当前代码及报错
运行的代码
USS_2023 = USS_2023.drop(USS_2023[(USS_2023['Courses'] == np.nan) & [USS_2023['Sheet_Name']=='Gdg']].index)
报错信息
ValueError: setting an array element with a sequence.
问题原因及修复方案
错误点解析
- NaN判断错误:用
== np.nan无法正确识别空值,因为NaN和任何值比较结果都是False,必须用.isna()方法。 - 条件格式错误:
[USS_2023['Sheet_Name']=='Gdg']多了一层方括号,把布尔序列变成了列表,导致逻辑运算出错。 - 列名不一致:需求里的列名是
Course,代码里写成了Courses,会导致列不存在或者筛选逻辑失效。
修正后的代码
# 方法一:使用drop删除目标行 USS_2023 = USS_2023.drop(USS_2023[(USS_2023['Course'].isna()) & (USS_2023['Sheet_Name'] == 'Gdg')].index)
更简洁的写法
直接保留不符合删除条件的行,逻辑更直观:
USS_2023 = USS_2023[~((USS_2023['Course'].isna()) & (USS_2023['Sheet_Name'] == 'Gdg'))]
内容的提问来源于stack exchange,提问作者hyeri
相关产品推荐
相关产品推荐

