如何修复:无法将类型为 [float64] 的数组与标量类型 [bool] 进行比较


使用 pandas 时可能遇到的错误是:

 TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

当您尝试根据多个条件对 DataFrame 进行子集化并且未能在每个单独的条件周围放置括号时,通常会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们创建以下 pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'],
                   ' points ': [21, 30, 26, 29, 14, 29, 22, 16]})

#view DataFrame
print (df)

  team position points
0 AG 21
1 AG 30
2 AF26
3AC 29
4 BG 14
5 BF 29
6 BF 22
7 BC 16

现在假设我们尝试使用.loc函数仅显示团队等于“A”且位置等于“G”的那些行:

 #attempt to only show rows where team='A' and position='G'
df. loc [df. team == ' A ' & df. position == ' G ']

TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

我们收到一个ValueError ,因为我们没有在各个条件周围放置括号。

由于&运算符优先于==运算符,pandas 无法以正确的顺序解释此语句。

如何修复错误

纠正此错误的最简单方法是在各个条件周围添加括号,如下所示:

 #only show rows where team='A' and position='G'
df. loc [(df. team == ' A ') & (df. position == ' G ')]

	team position points
0 A G 21
1 A G 30

请注意,我们没有收到任何ValueError ,并且我们成功地对 DataFrame 进行了子集化。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复:列重叠但未指定后缀
如何修复:您正在尝试合并 object 和 int64 列
如何修复:无法定义具有不匹配列的行

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注