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



我在一个名为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看起来像交互式片段,因此在这种情况下,这意味着应该像在交互式会话中一样对齐(提示和输出(。

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