You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas Series中实现‘非’过滤(区别于DataFrame)

How to Perform Negative/Reverse Filtering on a pandas Series

Great question! The built-in filter() method for pandas Series only handles positive matching (with like, regex, or in), but there are simple, flexible ways to get the reverse filtering you need. Let's break this down by two common scenarios:

Filtering Out Values

1. Exclude values matching a string pattern

Use ~ (the NOT operator) alongside str.contains() to flip the boolean results of a pattern match. This works perfectly for string-based Series:

import pandas as pd

# Sample Series
fruit_series = pd.Series(["apple", "banana", "cherry", "date", "blueberry"])

# Exclude any value containing "berry"
filtered_fruits = fruit_series[~fruit_series.str.contains("berry")]
# Result: 0    apple, 1    banana, 2    cherry, 3    date

Add case=False to ignore capitalization, or na=False to treat NaN values as non-matching (so they get excluded or included based on your logic).

2. Exclude values from a specific list

If you have a set of exact values to exclude, pair ~ with isin():

exclude_list = ["apple", "date"]
filtered_fruits = fruit_series[~fruit_series.isin(exclude_list)]
# Result: 1    banana, 2    cherry, 4    blueberry

Filtering Out Indexes

If you need to exclude rows based on their index (instead of values), you have two solid options:

1. Use filter() to get matching indexes, then drop them

First use the positive filter() to grab the indexes you want to exclude, then remove them with drop():

# Series with labeled indexes
number_series = pd.Series([1, 2, 3, 4, 5], 
                          index=["fruit_apple", "fruit_banana", "veg_carrot", "veg_broccoli", "fruit_cherry"])

# Exclude indexes containing "fruit"
exclude_indexes = number_series.filter(like="fruit").index
filtered_numbers = number_series.drop(exclude_indexes)
# Result: veg_carrot      3, veg_broccoli    4

2. Boolean indexing on the index

Similar to value filtering, use ~ with index.str.contains() for pattern-based index exclusion:

filtered_numbers = number_series[~number_series.index.str.contains("fruit")]

This also supports regex patterns—just add regex=True and pass your regex string, like ~number_series.index.str.contains(r'^veg_c', regex=True) to exclude indexes starting with "veg_c".

内容的提问来源于stack exchange,提问作者WestCoastProjects

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:04:32