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

2024-06-11 14:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
    'year': [2012, 2012, 2013, 2014, 2014],
    'reports': [4, 24, 31, 2, 3]}

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)]

在这里,可以看到一个列表(即值列表)已经通过。如果我不想传递一个列表,只想传递一个整数(即,在reports列中传递24以查找其对应的行),那么理想的方式是什么。我试过这么做,但实际上没用:

df[df.reports.isin(24)]

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

另外,我如何根据24号报告(即Molly)找到相应的“名称”


Tags: namedataframedf列表dataindexsantamolly
1条回答
网友
1楼 · 发布于 2024-06-11 14:02:15

只需使用布尔索引:

>>> 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

您可以对单个元素列表使用.isin

>>> df[df.reports.isin([24])]
       name  reports  year
Pima  Molly       24  2012

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

如果您有一个大的数据帧(比方说,超过10000行)和一个更复杂的布尔表达式,那么您可以使用df.query高效地执行此操作:

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

如果您有可用的numexpr引擎,这将是快速和内存效率高的。

相关问题 更多 >