如何在Pandas中使用 “NOT IN “过滤器
在这篇文章中,我们将讨论pandas中的NOT IN过滤器,NOT IN是一个成员运算符,用于检查数据帧中是否存在数据。如果该值不存在,它将返回true,否则返回false。
让我们创建一个样本数据框架
# import pandas module
import pandas as pd
# create dataframe
data1 = pd.DataFrame({'name': ['sravan', 'harsha', 'jyothika'],
'subject1': ['python', 'R', 'php'],
'marks': [96, 89, 90]}, index=[0, 1, 2])
# display
data1
输出:
sample dataframe
方法1:使用单列的NOT IN过滤器
我们使用isin()操作符来获取数据框中的给定值,这些值来自于列表,所以我们正在过滤数据框中存在于该列表中的一列值。
语法 :
dataframe[~dataframe[column_name].isin(list)]
其中
- dataframe是输入数据帧
- column_name是被过滤的列。
- list是该列中要删除的值的列表
# import pandas module
import pandas as pd
# create dataframe
data1 = pd.DataFrame({'name': ['sravan', 'harsha', 'jyothika'],
'subject1': ['python', 'R', 'php'],
'marks': [96, 89, 90]}, index=[0, 1, 2])
# consider a list
list1 = ['harsha', 'jyothika']
# filter in name column
print(data1[~data1['name'].isin(list1)])
print("============")
# consider a list
list2 = ['R']
# filter in name column
print(data1[~data1['subject1'].isin(list2)])
print("============")
# consider a list
list3 = [96, 89]
# filter in name column
print(data1[~data1['marks'].isin(list3)])
输出:
单列的NOT IN过滤器
方法2:使用多列的NOT IN过滤器
现在我们可以通过使用any()函数来过滤多于一列的内容。这个函数将检查任何给定列中存在的值,列是用逗号分隔的[[]]。
语法 :
dataframe[~dataframe[[columns]].isin(list).any(axis=1)]
# import pandas module
import pandas as pd
# create dataframe
data1 = pd.DataFrame({'name': ['sravan', 'harsha', 'jyothika'],
'subject1': ['python', 'R', 'php'],
'marks': [96, 89, 90]}, index=[0, 1, 2])
# consider a list
list1 = ['harsha', 'jyothika', 96]
# filter in name and marks column
print(data1[~data1[['name', 'marks']].isin(list1).any(axis=1)])
print("============")
# consider a list
list2 = ['R', 'sravan']
# filter in name and subject1 column
print(data1[~data1[['subject1', 'name']].isin(list2).any(axis=1)])
输出:
带有多列的NOT IN过滤器
方法3:使用带有NOT IN过滤器的numpy
这与上述功能类似。
语法:
dataframe[~numpy.isin(dataframe[‘column’], list)]
# import pandas module
import numpy as np
import pandas as pd
# create dataframe
data1 = pd.DataFrame({'name': ['sravan', 'harsha', 'jyothika'],
'subject1': ['python', 'R', 'php'],
'marks': [96, 89, 90]}, index=[0, 1, 2])
# consider a list
list1 = ['harsha', 'jyothika', 96]
# filter in name column
data1[~np.isin(data1['name'], list1)]
输出:
带有NOT IN过滤器的numpy