在 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