如何基于DataFrame列的完全匹配与部分匹配删除行?(Python3+)
基于多条件删除DataFrame行的实现方法
要实现删除Name列完全匹配Blue或Green,且Description列包含abc的行,可以用pandas的布尔索引或drop()方法完成,以下是具体实现:
步骤1:导入库并创建示例数据
import pandas as pd # 构造示例DataFrame data = { 'Name': ['Blue', 'Red', 'Green', 'Yellow', 'Blue'], 'Description': ['contains abc', 'random text', 'abc here', 'no match', 'def only'], 'Value': [10, 20, 30, 40, 50] } df = pd.DataFrame(data)
步骤2:定义过滤条件并处理
方法1:布尔索引保留目标行
直接通过取反操作,排除同时满足两个条件的行:
# 条件1:Name列是Blue或Green cond1 = df['Name'].isin(['Blue', 'Green']) # 条件2:Description列包含abc(na=False处理空值) cond2 = df['Description'].str.contains('abc', na=False) # 保留不同时满足两个条件的行 filtered_df = df[~(cond1 & cond2)]
方法2:使用drop()删除目标行
先定位符合删除条件的行索引,再执行删除:
# 获取需删除行的索引 drop_indices = df[(cond1 & cond2)].index # 删除指定索引的行 filtered_df = df.drop(drop_indices)
验证结果
运行以下代码查看原数据和过滤后的数据:
print("原DataFrame:") print(df) print("\n过滤后的DataFrame:") print(filtered_df)
输出结果会自动移除Name为Blue且Description含abc、Name为Green且Description含abc的两行。
额外注意事项
- 如果
Description列存在非字符串类型数据,需先转换为字符串:df['Description'] = df['Description'].astype(str) - 若需要忽略大小写匹配,给
str.contains()添加case=False参数:df['Description'].str.contains('abc', na=False, case=False)
内容的提问来源于stack exchange,提问作者Thiago Santos
相关产品推荐
相关产品推荐

