You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas测试中为枚举列构造正确的模拟数据?

问题

我在transformer.py中处理包含id和createdAt列的DataFrame,通过以下代码新增第三列:

class ColorType(Enum):
      LIGHT = 'LIGHT'
      def __str__(self):
          return self.name
data["colorType"] = ColorType

为测试该转换器,我在test_transformer.py中编写了如下代码(注:原代码存在语法错误,已修正括号):

record = utils.EXTRACTED_RECORD # 模拟原始数据
result = transformer.transform_columns(record)
expected = pd.DataFrame([
    {"id": 111111, 
     "completedAt":"2030-06-26T19:08:38.056Z",
     "colorType":"(LIGHT)"}
])
testing.assert_frame_equal(result, expected)

运行测试时出现错误:

AssertionError: DataFrame.iloc[:, 2] (column name="colorType" values are different (100.0%)
[index]: [0, 1]
[left]: [(LIGHT), (LIGHT)]
[right]: [(LIGHT), (LIGHT)]

我需要知道如何在预期DataFrame中正确模拟colorType枚举列,让断言通过?移除该列时测试可正常运行。

解决方法

核心问题是实际生成的列类型和预期值类型不匹配,同时原transformer代码的枚举赋值逻辑有误。

1. 修正transformer中的枚举赋值逻辑

你当前代码data["colorType"] = ColorType是把整个枚举类赋值给每一行,这不是正确用法。应该赋值枚举实例ColorType.LIGHT:

from enum import Enum
import pandas as pd

class ColorType(Enum):
      LIGHT = 'LIGHT'
      def __str__(self):
          return self.name

# 正确赋值枚举实例
data["colorType"] = ColorType.LIGHT

2. 统一测试用例的预期值类型

根据实际生成的列类型,调整预期值:

场景A:预期列存储枚举实例

如果transformer中直接存储枚举实例,测试里的预期值也要用ColorType.LIGHT:

import pandas as pd
from transformer import ColorType

record = utils.EXTRACTED_RECORD
result = transformer.transform_columns(record)
expected = pd.DataFrame([
    {"id": 111111, 
     "completedAt":"2030-06-26T19:08:38.056Z",
     "colorType": ColorType.LIGHT}
])
testing.assert_frame_equal(result, expected)

场景B:预期列存储字符串

如果需要把枚举转成字符串存储(比如后续要序列化),先修改transformer代码:

# transformer.py中调整
data["colorType"] = str(ColorType.LIGHT)
# 或者用枚举的value属性:data["colorType"] = ColorType.LIGHT.value

然后测试用例的预期值改为对应字符串:

expected = pd.DataFrame([
    {"id": 111111, 
     "completedAt":"2030-06-26T19:08:38.056Z",
     "colorType": "LIGHT"}
])
testing.assert_frame_equal(result, expected)

补充说明

错误提示里两边显示的(LIGHT)只是打印格式相同,实际左边是ColorType类对象,右边是字符串,类型不匹配才导致断言失败。必须保证预期值的类型和实际列的类型完全一致。

内容的提问来源于stack exchange,提问作者shr2936

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:01:30