如何删除DataFrame的第i行?DF.drop(i)执行无效的问题
DF = DF.drop(i)删除DataFrame第i行没生效? 下面是几种常见原因和对应解决办法:
索引标签≠行位置
drop()默认按索引标签删除行,不是按行的物理位置顺序。如果你的DataFrame索引不是连续整数(比如之前删过行导致索引断层,或是用了自定义索引),直接传数字i要么删错行,要么因为找不到对应标签而无变化。
解决:要按行位置删除,改用DF = DF.drop(DF.index[i]),或者用DF = DF.iloc[:i].append(DF.iloc[i+1:])。目标索引不存在
如果i不是当前DataFrame的索引标签,drop()默认会忽略该操作(errors='ignore'是默认参数),既不报错也不修改数据。比如索引是[1,3,5],执行DF.drop(2)时根本没有对应索引的行,自然看不到变化。
解决:先打印print(DF.index)确认现有索引,或者添加errors='raise'强制报错排查:DF = DF.drop(i, errors='raise'),若索引不存在会直接抛出异常,快速定位问题。数据类型不匹配
比如索引是字符串类型(如["a","b","c"])但你传的i是整数1,或者索引是整数但i是字符串"1",都会导致匹配失败,删除操作无效。
解决:检查type(i)和DF.index.dtype是否一致,将i转换成和索引相同的类型再执行删除。代码逻辑有覆盖
若执行DF = DF.drop(i)之后,又有代码重新给DF赋值(比如重新读取数据源),之前的删除操作会被覆盖,看起来像是没生效。
解决:检查代码顺序,确保删除操作之后没有重置DF的语句。
内容的提问来源于stack exchange,提问作者TourEiffel

