相当简单的问题,尝试了几件没有运气的事情。
我试图隔离出生日期在一定时间间隔内的顾客的年龄范围。
youth = cd.loc[cd.yearofbirth.isin([1996, 1997 1998, 1999]), "SALES"]
然而,工作正常,其他一些间隔更大(即包括30年以上)并且我不想全部写出来,而是做一个小于或等于和大于或等于。即。
youth = cd.loc[cd.yearofbirth >= 1996 | cd.yearofbirth <= 1999, "SALES"]
但是这行代码给了我一个错误
TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]
单个不等式可以正常工作,但是当它与第二个不相等时会产生错误。
非常感谢!
答案 0 :(得分:4)
您需要使用括号来分隔布尔条件。
而且,看起来你需要交集(&
)而不是条件的联合(|
):
youth = cd.loc[(cd.yearofbirth >= 1996) & (cd.birth_year <= 1999), "SALES"]
这是因为在Python中|
(或&
)precedence超过>=
,这可以解释您的错误。
这也在documentation:
中报告另一个常见的操作是使用布尔向量来过滤 数据。运营商是:| for or,&amp;为和,和〜为没有。这些 必须使用括号进行分组。
最后,对于这种特定情况,您可能根本不需要多个条件,因为您可以使用between
方法:
youth = cd.loc[cd.yearofbirth.between(1996, 1999), "SALES"]