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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注