在 Pandas DataFrame 中使用 isin() 函数
Samreena Aslam
2023年1月30日
Pandas
Pandas DataFrame
-
使用
isin()函数从 Pandas 中的字典对象创建 DataFrame -
使用
isin()函数过滤 Pandas DataFrame -
使用
isin()方法过滤 Pandas DataFrame 中的多个列 -
使用带有
Not (~)匹配条件的isin()方法来过滤 Pandas DataFrame
我们将在本教程中讨论如何使用 like SQL IN 和 Not IN 运算符来过滤 pandas DataFrame。此外,我们还将通过各种示例向你展示如何使用 isin() 函数和一元运算符(~) 根据条件过滤单行/列、过滤多列、过滤 pandasDataFrame .
使用 isin() 函数从 Pandas 中的字典对象创建 DataFrame
下面的示例 DataFrame 包含列 Student Name、Subject、Semester、Marks。导入 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 Design 和 Web 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 Development 和 Web Design 主题返回。
我们可以通过使用 Pandas DataFrame 行索引显示 true 和 false 来返回一个布尔数组。
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 Design 和 Ethics 主题的行。
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
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe