我正在使用polars.测试assert_frame_equal方法来比较两个包含相同列的排序过的格式,下面是我的代码:

assert_frame_equal(src_df, tgt_df, check_dtype=False, check_row_order=False)

对于包含500万条记录的收件箱,需要很长时间才能报告失败,因为它比较两个收件箱之间的所有行.有没有一种方法可以让两极立即失败,并报告第一次不匹配/失败并停止执行,因为我们只需要知道第一次失败.我try 搜索,但找不到此要求的任何文档.

有人能帮助我吗?

推荐答案

polars.testing.*种方法在报告差异时调用.to_list().

我发现,当涉及更大的数据时,这是显着放缓的一个根源.

如果您还想要错误报告,那么您似乎需要手动执行.

.arg_true()可以用作获取第一次不匹配的索引的一部分.

a = pl.Series(["a", "b", "c", "d"])
b = pl.Series(["a", "b", "e", "f"])


a.ne_missing(b).arg_true()
shape: (2,)
Series: '' [u32]
[
    2
    3
]

您可以参考执行的其他预判断的实现,但您可以执行类似于以下操作:

import polars as pl

N = 5

src_df = pl.DataFrame({
   "a": range(N),
   "b": list(range(N - 2)) + [42, 42]
}).sort(pl.all())

tgt_df = pl.DataFrame({
   "a": range(N),
   "b": range(N)
}).sort(pl.all())


"""
Insert other equality pre-checks here
"""

for col in src_df:
    try:
        idx = col.ne_missing(tgt_df[col.name]).arg_true().head(1).item()
        print("LEFT:", src_df[idx])
        print("RIGHT:", tgt_df[idx])
        break
    except ValueError:
        pass
LEFT: shape: (1, 2)
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 3   ┆ 42  │
└─────┴─────┘
RIGHT: shape: (1, 2)
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 3   ┆ 3   │
└─────┴─────┘

Python相关问答推荐

Python会扔掉未使用的表情吗?

如何在msgraph.GraphServiceClient上进行身份验证?

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

将整组数组拆分为最小值与最大值之和的子数组

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

按列分区,按另一列排序

在Pandas DataFrame操作中用链接替换'方法的更有效方法

在Mac上安装ipython

python中字符串的条件替换

为一个组的每个子组绘制,

Python逻辑操作作为Pandas中的条件

合并帧,但不按合并键排序

Flask Jinja2如果语句总是计算为false&

python—telegraph—bot send_voice发送空文件

为什么'if x is None:pass'比'x is None'单独使用更快?

基于Scipy插值法的三次样条系数

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

递归函数修饰器

在极点中读取、扫描和接收有什么不同?

Scipy差分进化:如何传递矩阵作为参数进行优化?