为什么熊猫会引发“ KeyError:True”,而“ df.Apples == 30&True”不是键?

时间:2019-01-20 10:24:18

标签: python pandas dataframe

基于熊猫的官方文档和有关的帮助:

pandas.DataFrame.loc

该loc允许通过标签或布尔数组访问一组行和列。 (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html

但是它看起来不是布尔数组真的不能工作!

import pandas as pd

data=[[30, 21],[0, 121],[4, 121]]
df= pd.DataFrame(data, columns=['Apples', 'Bananas'])

print(df.loc[df.Apples==30 & True])      # It's OK
print(df.loc[True])                      # **doesn't work**

1 个答案:

答案 0 :(得分:1)

答案在链接到的loc docs 中:

  

允许的输入为:

     
      
  • [...]
  •   
  • 与要切片的轴的长度相同的布尔数组,例如[True, False, True]
  •   

如果掩码的长度不同,则假定您正在搜索列中的标签,但找不到该标签,则会引发KeyError


请注意,df.Apples == 30 & Truedf的长度相同。

df.Apples == 30 & True

计算为

df.Apples == 0

哪个

0    False
1     True
2    False
Name: Apples, dtype: bool

因为==的优先级低于&。参见Operator Precedence