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 │
└─────┴─────┘