Pet*_*mit 3 python unit-testing pandas
对于单元测试,我必须比较两个 Pandas DataFrame(只有一列,因此它们也可以转换为 Series 而不会丢失信息)。问题是一个的索引是日期时间类型,另一个日期。出于我们的目的,两者中的信息是相等的,因为未使用日期时间的时间部分。
要检查单元测试的两个对象是否相等,我可以:
我是否缺少比较两者的优雅方式?
代码示例:
from datetime import date, datetime, timedelta
import pandas as pd
days_in_training = 40
start_date = date(2016, 12, 1)
dates = [start_date + timedelta(days=i) for i in range(days_in_training)]
actual = pd.DataFrame({'col1': range(days_in_training)}, index=dates)
start_datetime = datetime(2016, 12, 1)
datetimes = [start_datetime + timedelta(days=i) for i in range(days_in_training)]
expected = pd.DataFrame({'col1': range(days_in_training)}, index=datetimes)
assert(all(actual == expected))
Run Code Online (Sandbox Code Playgroud)
给出:
ValueError: Can only compare identically-labeled DataFrame objects
Run Code Online (Sandbox Code Playgroud)
为了将来参考,通过这篇博文(https://penandpants.com/2014/10/07/testing-with-numpy-and-pandas/)我找到了这个函数pandas.util.testing.assert_frame_equal()(https://github.com/pandas-dev/熊猫/blob/29de89c1d961bea7aa030422b56b061c09255b96/pandas/util/testing.py#L621 )
此功能在测试内容方面具有一定的灵活性。此外,它还打印了为什么 DataFrame 可能不被视为相等的摘要,该行assert(all(actual == expected))仅返回 True 或 False,这使得调试更加困难。
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |