在Pandas中删除DataFrame指定行时出现异常问题求助
解决DataFrame删除指定行后为空的问题
问题原因分析
你当前代码的核心问题有两个:
drop方法参数使用错误:你传入了整个routine_tasksDataFrame给drop,并且设置axis=1(删除列),这会让drop尝试删除routine_tasks包含的所有列,最终导致整个DataFrame被清空。- 拼写错误:代码中
Category筛选条件里的Maintaince是拼写错误,正确应为Maintenance,这可能导致你筛选出的routine_tasks不符合预期。
正确解决方案
方案1:通过索引删除目标行
先筛选出目标行,再提取其索引传入drop方法(axis=0表示删除行,可省略,因为默认值就是0):
# 修正拼写错误,筛选目标任务 routine_tasks = mboard.loc[(mboard['Down Date'] == '2021-06-20') & (mboard['Category'] == 'Maintenance')] # 通过索引删除对应行 Down = mboard.drop(routine_tasks.index)
方案2:直接反选保留所需行(更高效)
不需要先筛选出要删除的行,直接通过布尔索引反选保留其他数据:
Down = mboard[~((mboard['Down Date'] == '2021-06-20') & (mboard['Category'] == 'Maintenance'))]
方案3:使用query方法(代码更简洁)
如果喜欢更简洁的语法,可以用query实现:
Down = mboard.query("`Down Date` != '2021-06-20' or Category != 'Maintenance'")
补充说明
如果Down Date列的数据类型是datetime而非字符串,需要先转换后再筛选:
import pandas as pd mboard['Down Date'] = pd.to_datetime(mboard['Down Date']) routine_tasks = mboard.loc[(mboard['Down Date'] == pd.to_datetime('2021-06-20')) & (mboard['Category'] == 'Maintenance')]
内容的提问来源于stack exchange,提问作者Robert Mounce
相关产品推荐
相关产品推荐

