返回

Pandas中的IN和NOT IN过滤:简洁高效的数据筛选

python

Pandas中的IN和NOT IN过滤

前言

当我们处理数据时,经常需要根据某些条件过滤数据。在SQL中,我们可以使用“IN”和“NOT IN”操作符来检查值是否在指定列表中。Pandas数据框也提供了类似的功能,允许我们轻松地执行这些过滤操作。

IN 操作

IN 操作符用于检查一个值是否在指定列表中。要使用Pandas中的isin() 函数执行此操作,我们可以这样写:

df[df['column_name'].isin(values_list)]

其中:

  • df 是要过滤的数据框。
  • column_name 是要过滤的列名。
  • values_list 是一个包含要检查的值的列表。

例如,假设我们有一个名为 countries 的数据框,其中包含 country 列。我们可以使用以下代码过滤出国家名称为“美国”或“英国”的行:

countries[countries['country'].isin(['US', 'UK'])]

NOT IN 操作

NOT IN 操作符用于检查一个值是否不在指定列表中。要使用Pandas中的~isin() 函数执行此操作,我们可以这样写:

df[~df['column_name'].isin(values_list)]

其中:

  • df 是要过滤的数据框。
  • column_name 是要过滤的列名。
  • values_list 是一个包含要排除的值的列表。

例如,假设我们有一个名为 products 的数据框,其中包含 category 列。我们可以使用以下代码过滤出类别不是“电子产品”或“服装”的产品:

products[~products['category'].isin(['Electronics', 'Clothing'])]

使用in和not in过滤的优势

使用Pandas中的isin()~isin() 函数进行过滤具有以下优势:

  • 简洁性: 这些函数提供了简洁、易读的方法来执行“IN”和“NOT IN”过滤操作。
  • 效率: 与复杂的合并操作相比,这些函数效率更高。
  • 灵活性: isin()函数接受列表、元组或其他Pandas数据结构,提供更大的灵活性。

常见问题解答

  1. 如何将多个条件组合到IN或NOT IN过滤中?
    答:可以使用&(和)或|(或)运算符组合条件。例如:

    df[(df['condition1'].isin(values_list1)) & (df['condition2'].isin(values_list2))]
    
  2. 如何过滤包含空值的行?
    答:可以将pd.NA(空值占位符)包含在要过滤的值列表中。例如:

    df[df['column_name'].isin([pd.NA])]
    
  3. 如何排除包含空值的行?
    答:可以使用~isin()函数并指定dropna=True参数。例如:

    df[~df['column_name'].isin([pd.NA],dropna=True)]
    
  4. isin()函数是否区分大小写?
    答:默认情况下,isin()函数区分大小写。如果需要不区分大小写地进行过滤,可以使用str.lower()str.upper()函数将列中的值转换为小写或大写。

  5. 如何使用isin()函数对多个列进行过滤?
    答:可以通过使用|运算符将多个列的过滤条件连接起来。例如:

    df[(df['column1'].isin(values_list1)) | (df['column2'].isin(values_list2))]
    

总结

Pandas的isin()~isin() 函数提供了强大且高效的方法来根据指定列表过滤数据框。这些函数易于使用,可以实现各种过滤场景。理解这些函数的用法将使你能够更有效地从数据中提取有意义的见解。