我不确定我是否理解错误,或者下面的代码是否错误,但根据我的理解,下面的代码应该给出相同的输出:
transactions[transactions['date'].str[14:16] == '21' | transactions['date'].str[14:16] == '22']
和
transactions.query("date.str.slice(11, 13) == '21' | date.str.slice(11, 13) == '22'")
当我尝试第一个代码时出现错误:
transactions[transactions['date'].str[14:16] == '21' | transactions['date'].str[14:16] == '22']
错误:
TypeError: Cannot perform 'ror_' with a dtyped [object] array and scalar of type [bool]
但当使用.query
方法时,我没有得到错误:
transactions.query("date.str.slice(11, 13) == '21' | date.str.slice(11, 13) == '22'")
如何在不使用query
方法的情况下更改第一个代码,并使用query
方法获得与第二个代码相同的输出?
这是因为Python的运算符优先级。|
比==
更重要,因此'21' | transactions['date'].str[14:16]
在transactions['date'].str[14:16] == '21'
之前被评估。
要修复第一行代码,只需在==
条件周围添加括号:
transactions[(transactions['date'].str[14:16] == '21') | (transactions['date'].str[14:16] == '22')]
或者,如果您愿意,可以使用.eq
而不是==
:
transactions[transactions['date'].str[14:16].eq('21') | transactions['date'].str[14:16].eq('22')]