Python DataFrame行筛选:保留Total列为0或'-'的所有行
解决pandas DataFrame筛选'Total'列值为0或'-'的重复行问题
核心实现思路
直接通过布尔索引一次性筛选符合条件的行,避免多次拼接操作导致的重复。同时需要关注列的数据类型,确保条件匹配准确。
分场景解决方案
场景1:'Total'列为字符串类型(值为'0'或'-')
如果'Total'列存储的是字符串(比如从CSV读取时默认按字符串解析),用isin()方法直接匹配目标值:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'Total': ['0', '-', '100', '0', '-', '50']}) # 筛选符合条件的行 filtered_df = df[df['Total'].isin(['0', '-'])]
场景2:'Total'列为混合类型(存在数值0和字符串'-')
如果列内同时存在数值型的0和字符串'-',需要分别匹配两种类型的值:
filtered_df = df[(df['Total'] == 0) | (df['Total'] == '-')]
或者统一转换为字符串后再筛选,规避类型不匹配的问题:
filtered_df = df[df['Total'].astype(str).isin(['0', '-'])]
解决重复行问题
如果筛选后仍存在重复行,大概率是原数据本身包含重复记录,可在筛选后添加drop_duplicates()去重:
filtered_df = df[(df['Total'] == 0) | (df['Total'] == '-')].drop_duplicates()
重复行问题的常见诱因
- 多次使用
df.append()或pd.concat()拼接筛选结果,导致同一批数据被重复添加 - 筛选条件逻辑错误(比如重复执行筛选并赋值给同一个变量)
- 原DataFrame本身就包含重复行,未提前做去重处理
内容的提问来源于stack exchange,提问作者htm_01
相关产品推荐
相关产品推荐

