Pandas调用删除函数仅删除最后一条DataFrame记录问题求助
问题原因与解决办法
你的问题核心在于每次执行删除函数时,都是基于最初加载的file DataFrame操作,而非读取修改后的CSV文件。
举个实际流程例子:
- 第一次执行:从原始
file里删除一条记录,生成新的df写入CSV,但file本身还是最初的数据集,没有更新 - 第二次执行:依旧用原始
file删除另一条记录,生成的df会直接覆盖第一次写入的CSV,相当于第一次的删除操作被抹掉了 - 第三次执行:还是基于原始
file删除第三条记录,覆盖写入CSV,最终只有这最后一次的删除生效
解决办法
方法1:每次操作前重新读取最新CSV
修改函数,每次执行时先读取CSV里的最新数据,确保操作的是当前最新的数据集:
import pandas as pd def delete_title(title): # 每次执行都读取最新的CSV文件 file = pd.read_csv("filename.csv") # 找到对应标题的索引(注意:如果有重复标题,这里只会删第一条) i = file[file.TITLE == title].index[0] df = file.drop(file.index[i]) df.to_csv("filename.csv", index=False)
方法2:维护全局更新的DataFrame
如果不想频繁读写文件(提升性能),可以初始化一个全局DataFrame变量,每次删除后直接更新这个变量:
import pandas as pd # 初始化一次全局DataFrame file = pd.read_csv("filename.csv") def delete_title(title): global file # 声明使用全局变量 i = file[file.TITLE == title].index[0] # 直接更新全局的file变量 file = file.drop(file.index[i]) file.to_csv("filename.csv", index=False)
方法3:批量删除更高效
如果要删除多条记录,一次性批量处理比多次调用函数更高效,还能避免覆盖问题:
import pandas as pd def delete_titles(titles): file = pd.read_csv("filename.csv") # 过滤掉所有在待删除列表里的标题记录 df = file[~file.TITLE.isin(titles)] df.to_csv("filename.csv", index=False) # 调用示例:一次性删除3条指定记录 delete_titles(["标题A", "标题B", "标题C"])
内容的提问来源于stack exchange,提问作者user25258272
相关产品推荐
相关产品推荐

