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

如何读取Pandas DataFrame并使用Pytest测试corr函数?

解决Pytest测试中文件读取失败及单元测试规范问题

一、修复文件找不到的问题

你遇到的FileNotFoundError是因为Pytest运行时的工作目录和你写的相对路径不匹配导致的。要确保无论从哪个目录运行测试,都能正确找到数据文件,应该基于测试脚本的绝对路径来拼接数据路径:

from pathlib import Path

# 获取当前测试脚本所在的目录
test_script_dir = Path(__file__).parent
# 拼接数据文件的路径(根据你的目录结构调整)
data_file_path = test_script_dir / "../data/prcs1.csv"
# 转为绝对路径,彻底避免相对路径歧义
data_file_path = data_file_path.resolve()

二、修正测试代码的结构

你的代码把测试函数错误定义成了@pytest.fixture,fixture是用来准备测试数据的工具,真正的测试函数需要以test_开头,且不需要fixture装饰器。同时建议把数据读取逻辑放到fixture中,避免重复加载数据,提升测试效率。

修正后的完整测试代码:

import pytest
from geb import corr
import pandas as pd
import numpy as np
from pathlib import Path

@pytest.fixture(scope="module")
def raw_re_data():
    # 读取原始数据的fixture,scope="module"表示整个测试模块只加载一次
    test_script_dir = Path(__file__).parent
    data_file_path = test_script_dir / "../data/prcs1.csv"
    data_file_path = data_file_path.resolve()
    
    re_df = pd.read_csv(data_file_path, parse_dates=['Date'], index_col=["Date"])
    return re_df.values

@pytest.fixture(scope="module")
def neg_re_data(raw_re_data):
    # 基于原始数据生成负收益数据的fixture,复用已有数据
    re_df = pd.DataFrame(raw_re_data)
    neg_re_df = re_df[re_df < 0].fillna(0)
    return neg_re_df.values

def test_corr_with_raw_data(raw_re_data):
    # 测试原始数据的corr结果,用rel参数设置允许的相对误差,避免浮点精度问题
    assert pytest.approx(corr(raw_re_data), rel=1e-3) == 0.286

def test_corr_with_neg_data(neg_re_data):
    # 可添加负收益数据的测试,替换成你的预期值
    assert pytest.approx(corr(neg_re_data), rel=1e-3) == 你的预期结果值

三、关键注意事项

  • 路径可靠性:用Path(__file__)获取脚本绝对路径是最稳妥的方式,不会受运行测试的工作目录影响。
  • Fixture复用:把数据加载逻辑放到fixture中,不仅能避免重复加载,还能让不同测试用例共享数据,降低冗余代码。
  • 浮点断言:使用pytest.approx时建议设置rel或abs参数,允许结果存在合理的浮点误差,避免因精度问题导致断言失败。

内容的提问来源于stack exchange,提问作者kalin.klinkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:45:12