Enum类与pandas DataFrame共存触发ValueError问题咨询
为什么包含多个DataFrame成员的Enum类会抛出ValueError?
先看问题中的代码:
from enum import Enum import pandas as pd class Test(Enum): name_a = pd.DataFrame([ [1,2,3] ], columns = ["a", "b", "c"]) name_b = pd.DataFrame([ [4,5,6] ], columns = ["d", "e", "f"])
运行这段代码会抛出错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
但如果只保留name_a或name_b其中一个成员,代码就能正常运行。
原因解析
Python标准库的Enum类在完成所有成员的初始化后,会自动执行成员唯一性校验:它会遍历所有成员,两两比较是否相等,以此确保没有重复的成员值。
而Pandas的DataFrame在使用==运算符比较时,不会返回单个布尔值,而是返回一个和原DataFrame结构一致的布尔型DataFrame(每个元素对应位置比较结果)。当Enum试图把这个布尔DataFrame转换成单个布尔值来判断成员是否重复时,就会触发Pandas的这个经典错误——因为它无法确定整个DataFrame的“真值”到底是什么,必须明确指定用empty、any()这类方法来判断。
当Enum类里只有一个成员时,没有其他成员可以进行比较,唯一性校验步骤不会执行,自然也就不会触发这个错误,代码能正常运行。
内容的提问来源于stack exchange,提问作者user19976975
相关产品推荐
相关产品推荐

