pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较

Posted

技术标签:

【中文标题】pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较【英文标题】:pandas comparison raises TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool] 【发布时间】:2013-12-18 11:08:46 【问题描述】:

我的 dataFrame 具有以下结构:

Index: 1008 entries, Trial1.0 to Trial3.84
Data columns (total 5 columns):
CHUNK_NAME                    1008  non-null values
LAMBDA                        1008  non-null values
BETA                          1008  non-null values
HIT_RATE                      1008  non-null values
AVERAGE_RECIPROCAL_HITRATE    1008  non-null values

chunks=['300_321','322_343','344_365','366_387','388_408','366_408','344_408','322_408','300_408']
lam_beta=[(lambda1,beta1),(lambda1,beta2),(lambda1,beta3),...(lambda1,beta_n),(lambda2,beta1),(lambda2,beta2)...(lambda2,beta_n),........]

my_df.ix[my_df.CHUNK_NAME==chunks[0]&my_df.LAMBDA==lam_beta[0][0]]

我想获取特定块的 Dataframe 的行,比如说块 [0] 和特定的 lambda 值。所以在这种情况下,输出应该是数据帧中具有 CHUNK_NAME='300_321' 和 LAMBDA=lambda1 的所有行。对于将返回的每个 beta 值,将有 n 行。但相反,我得到了以下错误。任何解决此问题的帮助将不胜感激。

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

【问题讨论】:

【参考方案1】:

& 的优先级高于==。写:

my_df.ix[(my_df.CHUNK_NAME==chunks[0])&(my_df.LAMBDA==lam_beta[0][0])]
         ^                           ^ ^                            ^

【讨论】:

这个优先权让我很苦恼!谢谢 :)。如果我错了,请纠正我,但我不认为这个属性在文档中非常明显。如果有人可以添加这个,如果还没有的话,那就太好了。 这里记录了:pandas.pydata.org/pandas-docs/stable/…“另一个常见的操作是使用布尔向量来过滤数据。操作符是:| for or, & for and, and ~ for not. 这些 必须使用括号进行分组。” & 的优先级由 Pythons 语法设置,而不是 pandas。

以上是关于pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较的主要内容,如果未能解决你的问题,请参考以下文章

Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构

numpy 引发错误:TypeError:无法推断类型的架构:<class 'numpy.float64'>

TypeError:无法使用这些索引器对 <class 'pandas.indexes.base.Index'> 进行标签索引

TypeError:无法将 Net::HTTPOK 转换为字符串

TypeError:无法读取未定义的属性“userAgent”

Mongoose TypeError:无法读取未定义的属性“googleID”