在 Pandas DataFrame 中使用 isin() 函数

Samreena Aslam 2023年1月30日
  1. 使用 isin() 函数从 Pandas 中的字典对象创建 DataFrame
  2. 使用 isin() 函数过滤 Pandas DataFrame
  3. 使用 isin() 方法过滤 Pandas DataFrame 中的多个列
  4. 使用带有 Not (~) 匹配条件的 isin() 方法来过滤 Pandas DataFrame
在 Pandas DataFrame 中使用 isin() 函数

我们将在本教程中讨论如何使用 like SQL INNot IN 运算符来过滤 pandas DataFrame。此外,我们还将通过各种示例向你展示如何使用 isin() 函数和一元运算符(~) 根据条件过滤单行/列、过滤多列、过滤 pandasDataFrame .

使用 isin() 函数从 Pandas 中的字典对象创建 DataFrame

下面的示例 DataFrame 包含列 Student NameSubjectSemesterMarks。导入 pandas 库并创建一个 DataFrame。

import pandas as pd

student_record = {
    "Student Name": ["Samreena", "Affan", "Mirha", "Asif"],
    "Subject": ["SDA", "Ethics", "Web Design", "Web Development"],
    "Semester": ["6th", "7th", "5th", "8th"],
    "Marks": [100, 90, 80, 70],
}
index_labels = [0, 1, 2, 3]
df = pd.DataFrame(student_record, index=index_labels)
print(df)

输出:

   Student Name         Subject  Semester  Marks
0     Samreena              SDA      6th    100
1        Affan           Ethics      7th     90
2        Mirha       Web Design      5th     80
3         Asif  Web Development      8th     70

使用 isin() 函数过滤 Pandas DataFrame

我们可以使用类似于 SQL 中的 IN 运算符的 isin() 方法过滤 pandas DataFrame 行。

要过滤行,将检查单个列中的所需元素。使用 pd.series.isin() 函数,我们可以检查搜索元素是否存在于系列中。

如果元素将在系列中匹配,则返回 true,否则返回 false

例如,我们希望在 Subject 列中返回包含 Web DesignWeb Development 主题的行。

import pandas as pd

student_record = {
    "Name": ["Samreena", "Affan", "Mirha", "Asif"],
    "Subject": ["SDA", "Ethics", "Web Design", "Web Development"],
    "Semester": ["6th", "7th", "5th", "8th"],
    "Marks": [100, 90, 80, 70],
}
index_labels = [0, 1, 2, 3]
dataframe = pd.DataFrame(student_record, index=index_labels)
# Find elements in a Column to return rows
subjects_list = ["Web Design", "Web Development"]
dataframe1 = dataframe[dataframe.Subject.isin(subjects_list)]
print(dataframe1)

输出:

    Name          Subject   Semester  Marks
2   Mirha       Web Design      5th     80
3   Asif   Web Development      8th     70

请注意,仅显示那些学生姓名 Web DevelopmentWeb Design 主题返回。

我们可以通过使用 Pandas DataFrame 行索引显示 truefalse 来返回一个布尔数组。

import pandas as pd

student_record = {
    "Name": ["Samreena", "Affan", "Mirha", "Asif"],
    "Subject": ["SDA", "Ethics", "Web Design", "Web Development"],
    "Semester": ["6th", "7th", "5th", "8th"],
    "Marks": [100, 90, 80, 70],
}
index_labels = [0, 1, 2, 3]

dataframe = pd.DataFrame(student_record, index=index_labels)
subjects_list = ["Web Design", "Web Development"]
dataframe1 = dataframe.Subject.isin(subjects_list)
print(dataframe1)

输出:

0    False
1    False
2    True
3    True
Name: Subject, dtype: bool

使用 isin() 方法过滤 Pandas DataFrame 中的多个列

我们还可以使用 isin() 方法对多个列应用过滤器。例如,我们想要检索所有具有 SDA 主题或第五学期的行。

import pandas as pd

student_record = {
    "Name": ["Samreena", "Affan", "Mirha", "Asif"],
    "Subject": ["SDA", "Ethics", "Web Design", "Web Development"],
    "Semester": ["6th", "7th", "5th", "8th"],
    "Marks": [100, 90, 80, 70],
}
index_labels = [0, 1, 2, 3]
dataframe = pd.DataFrame(student_record, index=index_labels)
dataframe1 = dataframe[
    dataframe[["Subject", "Semester"]].isin(["SDA", "7th"]).any(axis=1)
]
print(dataframe1)

输出:

       Name  Subject  Semester  Marks
0   Samreena    SDA      6th    100
1     Affan  Ethics      7th     90

使用带有 Not (~) 匹配条件的 isin() 方法来过滤 Pandas DataFrame

isin() 方法的行为类似于 SQL 中的 IN 运算符。我们将使用一元运算符 (~) 来实现 Not IN 运算符。

例如,我们只想显示那些不包含 Web DesignEthics 主题的行。

import pandas as pd

student_record = {
    "Name": ["Samreena", "Affan", "Mirha", "Asif"],
    "Subject": ["SDA", "Ethics", "Web Design", "Web Development"],
    "Semester": ["6th", "7th", "5th", "8th"],
    "Marks": [100, 90, 80, 70],
}
index_labels = [0, 1, 2, 3]
dataframe = pd.DataFrame(student_record, index=index_labels)
subjects_list = ["Web Design", "Ethics"]

# Applying Not operator
dataframe1 = dataframe[~dataframe.Subject.isin(subjects_list)]
print(dataframe1)

输出:

       Name          Subject  Semester  Marks
0  Samreena              SDA      6th    100
3      Asif  Web Development      8th     70

相关文章 - Pandas DataFrame