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

使用pytest测试方法返回DataFrame列匹配时运行报错,求解决方案

错误修复方案

1. 修正测试用DataFrame的构造逻辑

你当前的fixture中构造DataFrame的参数传递错误:

  • 你传入了一维列表作为数据,pandas会将每个元素识别为单独的行,而非单行的多列值
  • 传入的7个值和你定义的6个列名数量不匹配,会直接触发参数错误
    修正后的fixture代码如下:
@pytest.fixture
def df():
    # 单行数据需包裹在二维列表中,外层列表代表行,内层列表代表当前行的所有列值
    df = pd.DataFrame(
        [
            ['2020-06-05 01:01:00', '1591318860',
             'Jun 4, 2020 at 7:01 PM',
             '7:01 PM', 71, True, 71]
        ],
        # 补全第7个列名,可根据接口真实返回的列名调整
        columns=['time', 'formattedTime', 'formattedAxisTime', 'time_label', 'value', 'hasData', 'formattedValue']
    )
    return df

注意需要将value、hasData等字段的字符串格式改为和接口返回一致的数字、布尔类型,避免后续类型不匹配导致断言失败。

2. 修正断言逻辑

你当前写的assert data.columns.equals(df)逻辑完全错误:data.columns是列名集合,无法和整个DataFrame做相等判断。根据你的测试需求选择对应断言方式:

  • 若要验证两个DataFrame的内容、列名、索引完全一致,使用pandas内置的测试方法:
pd.testing.assert_frame_equal(data, df)
  • 若仅需要验证列名一致:
assert data.columns.equals(df.columns)
  • 若仅需要验证关键字段值符合预期,可以简化断言:
assert data['value'].iloc[0] == 71
assert data['hasData'].iloc[0] == True

3. 调试适配接口返回结构

如果修正后仍断言失败,先在测试函数中添加打印逻辑,确认接口真实返回的结构和值:

def test__dict_request(keyword, start, end, df):
    """test the dict functionality"""
    pytrends = GoogleTrends()
    data = pytrends.interest_over_time(kw_list=keyword, start_date=start, end_date=end)
    # 运行pytest时加-s参数即可看到打印内容
    print("接口返回数据结构:\n", data.dtypes)
    print("接口返回数据内容:\n", data.head())
    pd.testing.assert_frame_equal(data, df)

根据打印的真实返回结果调整测试df的构造即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:05