首页 > 解决方案 > Pandas MultiIndex,其中一个因素是枚举

问题描述

我在使用其列是多索引的数据框时遇到问题,其中一个可迭代对象是 Enum。考虑代码:

MyEnum = Enum("MyEnum", "A B")
df = pd.DataFrame(columns=pd.MultiIndex.from_product(iterables=[MyEnum, [1, 2]]))

这引发

TypeError: 'values' is not ordered, please explicitly specify the categories order by passing in a categories argument.

这可以通过代替放置来解决:

df = pd.DataFrame(columns=pd.MultiIndex.from_product(iterables=[
    pd.Series(MyEnum, dtype="category"),
    [1, 2]
]))

但随后附加一行

df.append({(MyEnum.A, 1): "abc", (MyEnum.B, 2): "xyz"}, ignore_index=True)

加起来TypeError和以前一样。

我已经尝试过这个主题的各种变化,但没有成功。(如果列不是多索引,而是枚举,则不会出现问题。)

(请注意,我可以通过使用 IntEnum 而不是 Enum 来避免这种情况。但是,我的列只是显示为数字 --- 这就是为什么我想首先使用 Enum,而不是 int。)

非常感谢!

标签: python-3.xpandasenums

解决方案


推荐阅读