错误,“只允许将类似列表的对象传递给 isin(),您传递了一个 [int]”

Joh*_*ohn 6 python dataframe pandas

以下采用的代码仅用于示例目的:

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
    'year': [2012, 2012, 2013, 2014, 2014],
    'reports': [4, 24, 31, 2, 3]}
Run Code Online (Sandbox Code Playgroud)

df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])

df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])

value_list = ['Tina', 'Molly', 'Jason']

df[df.name.isin(value_list)]
Run Code Online (Sandbox Code Playgroud)

这里,可以看到传递了一个列表(即value_list)。如果我不想传递列表而只想传递一个整数(即报告列中的 24 来查找其相应的行),那么理想的方法是什么。我尝试这样做,但实际上不起作用:

df[df.reports.isin(24)]
Run Code Online (Sandbox Code Playgroud)

错误如下:仅允许将类似列表的对象传递给 isin(),您传递了一个 [int]。

另外,我怎样才能找到报告24中相应的“名字”(即莫莉)

jua*_*aga 6

只需使用布尔索引:

>>> df
             name  reports  year
Cochice     Jason        4  2012
Pima        Molly       24  2012
Santa Cruz   Tina       31  2013
Maricopa     Jake        2  2014
Yuma          Amy        3  2014
>>> df[df.reports == 24]
       name  reports  year
Pima  Molly       24  2012
Run Code Online (Sandbox Code Playgroud)

可以使用.isin单元素列表:

>>> df[df.reports.isin([24])]
       name  reports  year
Pima  Molly       24  2012
Run Code Online (Sandbox Code Playgroud)

但布尔索引选项是您通常会看到的。

如果您有一个大型数据框(比方说超过 10,000 行)和一个更复杂的布尔表达式,您可以使用以下方法有效地完成此操作df.query

>>> df.query("reports==24 or name == 'Jason'")
          name  reports  year
Cochice  Jason        4  2012
Pima     Molly       24  2012
Run Code Online (Sandbox Code Playgroud)

如果您有可用的引擎,这将是快速且节省内存的numexpr