python - 比较两个几乎相等的 Pandas Series/DataFrame

标签 python unit-testing pandas

对于单元测试,我必须比较两个 pandas DataFrame(具有一列,因此它们也可以转换为系列而不丢失信息)。问题在于一个的索引是日期时间类型,另一个是日期类型。出于我们的目的,两者中的信息是相等的,因为不使用日期时间的时间部分。

要检查单元测试的两个对象是否相等,我可以:

  • 提取其中之一的索引并转换为日期/日期时间
  • 仅提取一列的值,比较这些值以及开始日期和结束日期

我是否缺少任何比较两者的优雅方法?

代码示例:

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))

给予:

ValueError: Can only compare identically-labeled DataFrame objects

最佳答案

为了将来引用,通过这篇博文 ( https://penandpants.com/2014/10/07/testing-with-numpy-and-pandas/ ),我找到了函数 pandas.util.testing.assert_frame_equal() ( https://github.com/pandas-dev/pandas/blob/29de89c1d961bea7aa030422b56b061c09255b96/pandas/util/testing.py#L621 )

该函数的测试内容具有一定的灵 active 。此外,它还打印了为什么 DataFrame 可能不被视为相等的摘要,行 assert(all(actual == Expect)) 仅返回 True 或 False,这使得调试更加困难。

关于python - 比较两个几乎相等的 Pandas Series/DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913113/

相关文章:

python - 如何使用 Altair 显示百分比直方图而不是计数

javascript - 有没有办法为 Jasmine 单元测试(Angular 4)提供基类?

ios - 控制 OCUnit 中单元测试方法的顺序

python - 在 NumPy 中使用多级 bool 索引掩码

python - TensorFlow 1.7 + Keras 和数据集 : Object has no attribute 'ndim'

php - Laravel 5.5 PHPUnit 不显示描述

python - 搜索模式不唯一? - 正则表达式

python - Pandas DataFrame 上的循环过滤器不起作用

python-3.x - 对于给定的数据,我需要在 Key 列中找到 "a"的计数

c++ - boost::python 字符串可转换属性