Pandas:如何过滤“不包含”项目?
您可以使用以下方法在 pandas DataFrame 中执行“不包含”过滤器:
方法1:过滤不包含特定字符串的行
filtered_df = df[df[' my_column ']. str . contains (' some_string ') == False ]
方法 2:过滤不包含多个特定字符串之一的行
filtered_df = df[df[' my_column ']. str . contains (' string1|string2|string3 ') == False ]
以下示例展示了如何在实践中使用以下 pandas DataFrame 的每种方法:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['Nets', 'Rockets', 'Mavs', 'Spurs', 'Kings', 'Nuggets'], ' points ': [18, 22, 19, 14, 14, 11], ' assists ': [5, 7, 7, 9, 12, 9], ' rebounds ': [11, 8, 10, 6, 6, 5]}) #view DataFrame print (df) team points assists rebounds 0 Nets 18 5 11 1 Rockets 22 7 8 2 Mavs 19 7 10 3 Spurs 14 9 6 4 Kings 14 12 6 5 Nuggets 11 9 5
示例 1:过滤不包含特定字符串的行
以下代码显示如何过滤 pandas DataFrame 中团队列名称中不包含“ets”的行:
#filter for rows that do not contain 'ets' in the 'team' column
filtered_df = df[df[' team ']. str . contains (' ets ') == False ]
#view filtered DataFrame
print (filtered_df)
team points assists rebounds
2 Mavs 19 7 10
3 Spurs 14 9 6
4 Kings 14 12 6
请注意,生成的 DataFrame 不包含任何在team列中的值在名称中包含“ets”的行。
特别是,以下团队已被排除在 DataFrame 之外:
- 网队
- 火箭队
- 掘金队
请注意,每个团队名称中都包含“ets”。
示例 2:过滤不包含多个特定字符串之一的行
以下代码显示如何过滤 pandas DataFrame 中团队列名称中不包含“ets”的行:
#filter for rows that do not contain 'ets' or 'urs' in the 'team' column
filtered_df = df[df[' team ']. str . contains (' ets|urs ') == False ]
#view filtered DataFrame
print (filtered_df)
team points assists rebounds
2 Mavs 19 7 10
4 Kings 14 12 6
请注意,生成的 DataFrame 不包含任何在team列中的值在名称中包含“ets”或“urs”的行。
注: |运算符在 pandas 中的意思是“OR”。
其他资源
以下教程解释了如何在 pandas 中执行其他常见的过滤操作:
如何按列值过滤 Pandas DataFrame
如何按日期过滤 Pandas DataFrame 行
如何根据多个条件过滤 Pandas DataFrame