Python Pandas 如何删除CSV文件中的指定行或按索引删除行
问题原因
你写的代码无法生效的核心原因是:iterrows()返回的每一行produto是原DataFrame的副本,对副本做删除操作不会修改原数据,完全达不到修改CSV的效果。另外pandas本身有成熟的批量行操作方法,不需要用遍历的方式删行,效率很低。
正确实现方式
第一步:读取CSV文件
import pandas as pd # 你的CSV是空格分隔,所以sep设为\s+匹配多个空格,如果是常规逗号分隔CSV去掉sep参数即可 produtos = pd.read_csv("你的文件路径.csv", sep="\s+")
注意:pandas默认行索引从0开始计数,你给出的示例CSV中,ID为332的行对应索引是1,第三行ID为112的行对应索引是2。
方法1:按行索引删除指定行
用pandas内置的drop方法即可实现:
# 示例:删除索引为1的行(对应ID为332的记录) # inplace=True代表直接修改原DataFrame,也可以不加这个参数,把结果赋值给新变量 produtos.drop(index=1, inplace=True) # 如果要同时删除多个索引的行,传索引列表即可 # 示例:删除索引0和2的行:produtos.drop(index=[0,2], inplace=True)
方法2:按指定条件删除行(更稳妥,不依赖索引位置)
如果不想依赖行索引,要删除符合指定条件的行,比如直接删ID为332的记录:
# 写法1:布尔索引筛选保留符合条件的行 produtos = produtos[produtos["ID"] != 332] # 写法2:结合drop方法实现 produtos.drop(index=produtos[produtos["ID"] == 332].index, inplace=True)
第三步:保存修改结果到CSV
# index=False代表不把pandas的行索引写入最终CSV produtos.to_csv("修改后的文件路径.csv", index=False)
内容的提问来源于stack exchange,提问作者user17149615
相关产品推荐
相关产品推荐

