使用pandas删除DataFrame中指定列值第二次出现后的所有行
实现方案
核心思路:先定位所有分隔符---的出现位置,取第二次出现的索引,直接切片保留该索引之前的所有行即可。
完整代码
import pandas as pd # 读取原始文件 dl = pd.read_csv('Underlying Cause of Death, 1999-2019(3).txt', sep = '\t') # 定位所有包含分隔符---的行(自动忽略值前后的空格) sep_indexes = dl[dl.apply(lambda row: row.astype(str).str.strip().eq('---').any(), axis=1)].index # 确保存在至少2次分隔符出现 if len(sep_indexes) >= 2: # 取第二次出现的索引,保留该索引之前的所有行;如果要保留第二次的---本身,改为sep_indexes[1]+1 dl = dl.iloc[:sep_indexes[1]] # 输出结果 dl.to_csv('test.csv', index = False)
代码说明
- 用
str.strip()处理单元格值前后的空格,避免原文件中---带多余空格导致匹配失败的问题 sep_indexes存储了所有出现分隔符的行索引,从0开始计数,sep_indexes[1]就是第二次出现的位置- 增加了长度判断逻辑,避免文件中分隔符不足2次时触发索引报错
内容的提问来源于stack exchange,提问作者John Conor
相关产品推荐
相关产品推荐

