Функция с doctest, которая использует Pandas, не работает, когда у индекса есть имя - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь написать док-тесты, но я получаю некоторые ошибки при их выполнении. Когда я пишу тестовый документ, который получает pandas.DataFrame с index.name, тесты не пройдены.

MRE:

Обратите внимание, что:

  • pandas_doctest_with_indexname ( не работает)
  • pandas_doctest (работает)
import pandas as pd


def pandas_doctest_with_indexname():
    """Function with pandas doctest.

    Returns
    -------
    pandas.DataFrame

    Example
    -------
    >>> df = pandas_doctest_with_indexname()
    >>> df.head()
       a  b
    x
    0  1  2
    1  3  4
    """

    df = pd.DataFrame([[1,2], [3,4]], columns=["a", "b"])
    df.index.name = "x"
    return df


def pandas_doctest():
    """Function with pandas doctest.

    Returns
    -------
    pandas.DataFrame

    Example
    -------
    >>> df = pandas_doctest()
    >>> df.head()
       a  b
    0  1  2
    1  3  4

    """

    df = pd.DataFrame([[1,2], [3,4]], columns=["a", "b"])
    return df


if __name__ == "__main__":
    import doctest
    doctest.testmod()

Ошибка:

:!python pandas_doctst_mre.py
**********************************************************************
File "pandas_doctst_mre.py", line 13, in __main__.pandas_doctest_with_indexname
Failed example:
    df.head()
Expected:
       a  b
    x
    0  1  2
    1  3  4
Got:
       a  b
    x
    0  1  2
    1  3  4
**********************************************************************
1 items had failures:
   1 of   2 in __main__.pandas_doctest_with_indexname
***Test Failed*** 1 failures.


1 Ответ

0 голосов
/ 27 апреля 2020

Основной проблемой были пропущенные пробелы рядом с именем индекса x. По какой-то причине выходные данные, захваченные doctest, заполняют пробелами пробел справа, чтобы все строки имели одинаковую ширину.

Итак, я заполнил строку x пробелами, чтобы выровнять ее по b и теперь это работает.

def pandas_doctest_with_indexname():
    """Function with pandas doctest.

    Returns
    -------
    pandas.DataFrame

    Example
    -------
    >>> df = pandas_doctest_with_indexname()
    >>> df.head()
       a  b
    x      
    0  1  2
    1  3  4
    """

    df = pd.DataFrame([[1,2], [3,4]], columns=["a", "b"])
    df.index.name = "x"
    return df

if __name__ == "__main__":
    import doctest
    doctest.testmod()
...