如何使用Pandas对比并删除CSV文件中的指定行
基于Pandas的CSV重复表头行清理方案
原有代码问题排查
你给出的代码存在两处核心错误:
- 语法错误:Python中判断相等需要使用双等号
==,单等号=是赋值操作,运行会直接触发语法报错 - 逻辑错误:
df[df.name = "title"]的逻辑是仅保留name列为title的行,会直接删除所有正常数据和description行,和需求完全不符
完整实现代码
import pandas as pd # 读取文件时不自动识别表头,避免第一行title被默认设为列名 df = pd.read_csv(file, header=None) # 找到第一次出现title、description的行索引 first_title_pos = df[df.isin(['title']).any(axis=1)].index[0] first_desc_pos = df[df.isin(['description']).any(axis=1)].index[0] reserved_pos = {first_title_pos, first_desc_pos} # 过滤逻辑:保留首次出现的title、description行,其余同类行直接删除,同时保留所有正常数据行 df = df[df.apply(lambda x: x.name in reserved_pos or not x.isin(['title', 'description']).any(), axis=1)] # 可选操作:如果需要把第一行title设为DataFrame的列名,取消注释下面两行代码即可 # df.columns = df.iloc[0] # df = df[1:].reset_index(drop=True) # 导出处理后的文件 df.to_csv(file, index=False)
可调整说明
- 如果title、description固定出现在某一列(比如第一列),可以把匹配逻辑改为
df[df[0] == 'title'],匹配效率更高 - 代码默认保留原始文件的行顺序,不会打乱原有数据的排布
- 如果不需要保留description行,直接在reserved_pos中移除对应的变量即可
内容的提问来源于stack exchange,提问作者Sainita
相关产品推荐
相关产品推荐

