如何删除DataFrame中两个分隔符之间的所有行(含分隔符行)
解决方案
你的问题在于之前的代码只排除了Start delimiter和End delimiter这两行本身,但没有处理它们之间的内容。要实现删除整个区间(包括分隔符),可以通过标记处于区间内的行来完成,以下是两种可行方法:
方法一:遍历标记法
这种方法直观易懂,适合新手理解:
import pandas as pd # 假设你的DataFrame是df mask = [False] * len(df) in_delete_block = False for idx, value in enumerate(df['Col1']): if value == 'Start delimiter': in_delete_block = True mask[idx] = True # 标记Start行要删除 elif value == 'End delimiter': in_delete_block = False mask[idx] = True # 标记End行要删除 elif in_delete_block: mask[idx] = True # 标记区间内的行要删除 # 过滤掉标记为True的行 clean_df = df[~pd.Series(mask)]
方法二:累计和简洁法
利用Pandas的向量运算,更高效简洁:
import pandas as pd # 生成开始和结束分隔符的布尔序列 start_mask = df['Col1'] == 'Start delimiter' end_mask = df['Col1'] == 'End delimiter' # 计算当前是否处于要删除的区间内:Start累计数减去End累计数大于0,说明在区间中 in_block = start_mask.cumsum() - end_mask.cumsum() > 0 # 要删除的行是区间内的行 + End分隔符行(End不在in_block里) drop_mask = in_block | end_mask # 得到清理后的DataFrame clean_df = df[~drop_mask]
为什么你的原代码失效?
你之前的df.loc[~m1&~m2]只排除了等于Start delimiter和End delimiter的两行,但它们之间的行并没有被标记,所以会被保留下来,这就是结果不符合预期的原因。
内容的提问来源于stack exchange,提问作者user19956605
相关产品推荐
相关产品推荐

