使用两个条件pandas python过滤数据帧

时间:2017-06-30 15:44:05

标签: python pandas

相当简单的问题,尝试了几件没有运气的事情。

我试图隔离出生日期在一定时间间隔内的顾客的年龄范围。

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]

单个不等式可以正常工作,但是当它与第二个不相等时会产生错误。

非常感谢!

1 个答案:

答案 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"]