如何用For循环删除DataFrame中指定列表内的字符串数据?
解决方法
你不需要用For循环,Pandas提供了更高效且不易出错的内置方法来批量处理这类需求,以下是两种常用方案:
方案1:直接筛选保留目标行
通过isin()方法判断dog_breed列的值是否在non_dogs列表中,再用取反符号~保留不在列表里的行:
non_dogs = ['tiger_shark', 'upright', 'walking_stick', 'water_bottle'] # 保留dog_breed不在non_dogs里的行,直接覆盖原DataFrame或赋值给新变量 clean_images = clean_images[~clean_images['dog_breed'].isin(non_dogs)]
方案2:获取待删除索引后批量删除
和你原来的单值删除逻辑一致,但改成批量匹配所有需要删除的值:
non_dogs = ['tiger_shark', 'upright', 'walking_stick', 'water_bottle'] # 获取所有dog_breed在non_dogs里的行索引 to_drop_index = clean_images[clean_images['dog_breed'].isin(non_dogs)].index # 批量删除这些行,inplace=True直接修改原DataFrame clean_images.drop(to_drop_index, inplace=True)
为什么你的For循环可能失效?
如果循环里每次对单个值执行drop且用了inplace=True,会导致DataFrame在循环过程中不断被修改,后续的索引匹配可能出现偏差;另外循环处理的效率远低于Pandas的向量化操作,批量处理才是更合理的选择。
内容的提问来源于stack exchange,提问作者Miebi Williams
相关产品推荐
相关产品推荐

