在 Pandas DataFrame 中使用 isin() 函数
Samreena Aslam
2023年1月30日
-
使用
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