簡體   English   中英

你如何將 Doctest 與 Pandas 一起使用?

[英]How do you use Doctest with pandas?

我想寫一個doctest來測試這段代碼,但在網上沒有找到任何解決方案? 有什么建議嗎?

def CheckSampleTime(data):
    """Write to log file Sample Time outside of work hours if outside work ours

    >>> # example doctest here
    """

    StartTime = datetime.time(06, 00, 0)
    EndTime = datetime.time(17, 00, 0)

    data['SampleTime'] = pd.to_datetime(data.SampleTime)

    for index, row in data.iterrows():
        if (row['SampleTime'].time() < StartTime) or (row['SampleTime'].time() > EndTime):
            data.set_value(index,'LOG',"Sample Time outside of work hours")
            logging.warning("Sample Time outside of work hours (6am-5pm)")

doctest模塊與 Pandas 一起工作得很好。 例如,在腳本中運行以下代碼將成功運行doctest.testmod

df = pd.DataFrame(columns=['first_name', 'last_name'])
df = df.append(pd.Series({'first_name':'Rick','last_name':'Sanchez'}), ignore_index=True)
df = df.append(pd.Series({'first_name':'Stanford', 'last_name':'Pines'}), ignore_index=True)


def find_name(df, name):
    """ Find a name in a Pandas DataFrame.

    >>> df = pd.DataFrame(columns=['first_name', 'last_name'])
    >>> df = df.append(pd.Series({'first_name':'Rick','last_name':'Sanchez'}), ignore_index=True)
    >>> df = df.append(pd.Series({'first_name':'Stanford', 'last_name':'Pines'}), ignore_index=True)
    >>> find_name(df, 'Stanford')
      first_name last_name
    1   Stanford     Pines
    """
    mask = np.column_stack([df[col].str.contains(f"{name}", na=False) for col in df])
    print(df.loc[mask.any(axis=1)])


if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose=True)
Trying:
    df_test = pd.DataFrame(columns=['first_name', 'last_name'])
Expecting nothing
ok
Trying:
    df_test = df_test.append(pd.Series({'first_name':'Rick','last_name':'Sanchez'}), ignore_index=True)
Expecting nothing
ok
Trying:
    df_test = df_test.append(pd.Series({'first_name':'Stanford', 'last_name':'Pines'}), ignore_index=True)
Expecting nothing
ok
Trying:
    find_name(df_test, 'Stanford')
Expecting:
      first_name last_name
    1   Stanford     Pines
ok
1 items had no tests:
    __main__
1 items passed all tests:
   4 tests in __main__.find_name
4 tests in 2 items.
4 passed and 0 failed.
Test passed.

更多熊貓方式

data=pd.read_csv(StringIO('''SampleTime
2016-05-23 05:45:00
2016-05-23 06:15:00
2016-05-23 07:45:00
2016-05-23 16:15:00
2016-05-23 18:15:00'''), parse_dates=[0])

StartTime = datetime.time(06, 00, 0)
EndTime = datetime.time(17, 00, 0)

data.loc[(data['SampleTime'].dt.time < StartTime) | (data['SampleTime'].dt.time > EndTime), 'LOG'] = 'Sample Time outside of work hours'

if data['LOG'].isnull().any():
  logging.warning("Sample Time outside of work hours (6am-5pm)")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM