如何将 doctest 与 pandas 数据框一起使用?

How does one use doctest with a pandas dataframe?

我在名为 test.py 的文件中有一个简单的函数 (log_return)(见下文),我正在尝试使用 doctest 实现.

import pandas as pd

def log_return(df):
    '''Return the log return based on closing prices
    
    >>> df = pd.DataFrame({'Close': [100, 101, 102, 99]}, index = pd.date_range('2022-01-01', periods=4, freq='D'))
    >>> log_return(df)

            Close         r
2022-01-01    100       NaN
2022-01-02    101  0.009950
2022-01-03    102  0.009852
2022-01-04     99 -0.029853
    '''
    df['r'] = np.log(df['Close']).diff()

但是,当我尝试从命令行(例如 $ python test.py)执行 doctest 时,出现以下与空格相关的错误。我该如何解决这个错误?

ValueError: line 5 of the docstring for __main__.log_return has inconsistent leading whitespace: '2022-01-01    100       NaN'

你需要像这样缩进:

    '''
    ...

    >>> log_return(df)
                Close         r
    2022-01-01    100       NaN
    2022-01-02    101  0.009950
    2022-01-03    102  0.009852
    2022-01-04     99 -0.029853
    '''

请记住,doctest 应该看起来像交互式片段,因此在这种情况下,这意味着应该像在交互式会话(提示和输出)中一样对齐事物。

现在,一旦你解决了这个问题,测试就会失败,但这是一个单独的问题。