geekdoc-python-zh/docs/askpython/pandas-isin.md

6.7 KiB
Raw Permalink Blame History

熊猫的 isin()函数——一个完整的指南

原文:https://www.askpython.com/python-modules/pandas/pandas-isin

大家好!在本教程中,我们将学习熊猫模块中的isin()方法,并且我们将研究当不同类型的值被传递时这个函数的行为。所以让我们开始吧。

DataFrame.isin()方法

Pandas isin()方法用于过滤数据帧中的数据。该方法检查数据帧中的每个元素是否包含在指定的值中。这个方法返回布尔值的数据帧。如果元素出现在指定的值中,返回的数据帧包含True,否则显示False。因此,这种方法在过滤数据帧时很有用,我们将通过下面的例子看到这一点。

isin()方法的语法如下所示。它只需要一个参数:

DataFrame.isin(values)

这里参数values可以是其中的任何一个:

  • 列表或可迭代
  • 词典
  • 熊猫系列
  • 熊猫数据框

让我们看看当不同的值被传递给方法时isin()方法的结果。

isin()方法的示例

让我们考虑一些通过传递不同类型的值的isin()方法的例子。对于以下示例,我们将使用以下数据:

import pandas as pd

data = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'Age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

print(data)

    Name  Age      Department
0   John   25           Sales
1    Sam   45     Engineering
2   Luna   23     Engineering
3  Harry   32  Human Resource

值为列表时的 isin()方法

当一个列表作为参数值传递给isin()方法时,它检查 DataFrame 中的每个元素是否都在列表中,如果找到,就显示True。例如,如果我们传递一个包含一些部门的值的列表,Department列中的那些值将被标记为True

import pandas as pd
# Creating DataFrame
data = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'Age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

#List of Departments to filter
departments_to_filter = ['Engineering', 'Sales', 'Finance']

result = data.isin(departments_to_filter)

print(result)

    Name    Age  Department
0  False  False        True
1  False  False        True
2  False  False        True
3  False  False       False

因此,使用这种方法,我们也可以根据情况过滤数据帧。例如,我们想要查找年龄在 20 到 30 岁之间的员工,我们可以在Age列上使用isin()方法。

import pandas as pd
# Creating DataFrame
data = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'Age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

start_age=20
end_age=30
# Using isin() method to filter employees on age
age_filter = data['Age'].isin(range(start_age, end_age+1))
# Using the filter to retrieve the data
result = data[ age_filter ]

print(result)

   Name  Age   Department
0  John   25        Sales
2  Luna   23  Engineering

值为字典时的 isin()方法

当一个字典作为参数值传递给isin()方法时,对于 DataFrame 的不同列,要搜索的数据范围是不同的。因此,我们可以分别搜索每一列。例如,在字典中,我们可以为NameDepartment传递一个带有各自值的列表来进行搜索,如下所示。

import pandas as pd
# Creating DataFrame
data = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'Age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

#Dictionary data to filter DataFrame
dict_data_to_filter = {'Name': ['Sam', 'Harry'], 'Department': ['Engineering']}

result = data.isin(dict_data_to_filter)

print(result)

    Name    Age  Department
0  False  False       False
1   True  False        True
2  False  False        True
3   True  False       False

值为序列时的 isin()方法

当熊猫序列作为参数值传递给isin()方法时,序列中写入值的顺序变得很重要。数据帧的每一列都将按照写入的顺序,用序列中的值逐一检查。考虑下面的例子。

import pandas as pd
# Creating DataFrame
data = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'Age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

#Series data, changing index of Sam and Luna
series_data = pd.Series(['John', 'Luna', 'Sam', 'Harry'])

result = data.isin(series_data)

print(result)

    Name    Age  Department
0   True  False       False
1  False  False       False
2  False  False       False
3   True  False       False

尽管序列中出现的值包含数据 DataFrame 中出现的所有Names,但索引 1 和 2 处的结果包含False因为我们互换了“Sam”和“Luna”的索引。因此当序列作为值传递时索引很重要。

当值为 DataFrame 时,使用 isin()方法

当 Pandas 数据帧作为参数值传递给isin()方法时,传递的数据帧的索引和列必须匹配。如果两个数据帧相同,但列名不匹配,结果将显示这些列的False。如果两个数据帧中的数据相同,但顺序不同,那么对于那些不同的行,结果将是False。因此,如果传递数据帧,索引和列都很重要。考虑这个例子。

import pandas as pd
# Creating DataFrame
data = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'Age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

# DataFrame to filter, here column name Age to lowercased to age
df = pd.DataFrame({
  'Name': ['John', 'Sam', 'Luna', 'Harry'],
  'age': [25, 45, 23, 32],
  'Department': ['Sales', 'Engineering', 'Engineering', 'Human Resource']
})

result = data.isin(df)
print(result)

print("-----------------")

# DataFrame to filter, here last 2 rows are swapped
df = pd.DataFrame({
  'Name': ['John', 'Sam', 'Harry', 'Luna'],
  'Age': [25, 45, 32, 23],
  'Department': ['Sales', 'Engineering', 'Human Resource', 'Engineering']
})

result = data.isin(df)
print(result)

   Name    Age  Department
0  True  False        True
1  True  False        True
2  True  False        True
3  True  False        True
-----------------
    Name    Age  Department
0   True   True        True
1   True   True        True
2  False  False       False
3  False  False       False

结论

在本教程中,我们学习了 Pandas isin()方法,它的不同用例,以及该方法如何帮助从数据帧中过滤出数据。现在你知道了如何使用isin()方法,并且可以在数据框架中轻松过滤数据,所以恭喜你。

感谢阅读!!