Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/py-polars/tests/unit/dataframe/test_equals.py
6939 views
1
import pytest
2
3
import polars as pl
4
5
6
def test_equals() -> None:
7
# Values are checked
8
df1 = pl.DataFrame(
9
{
10
"foo": [1, 2, 3],
11
"bar": [6.0, 7.0, 8.0],
12
"ham": ["a", "b", "c"],
13
}
14
)
15
df2 = pl.DataFrame(
16
{
17
"foo": [3, 2, 1],
18
"bar": [8.0, 7.0, 6.0],
19
"ham": ["c", "b", "a"],
20
}
21
)
22
23
assert df1.equals(df1) is True
24
assert df1.equals(df2) is False
25
26
# Column names are checked
27
df3 = pl.DataFrame(
28
{
29
"a": [1, 2, 3],
30
"b": [6.0, 7.0, 8.0],
31
"c": ["a", "b", "c"],
32
}
33
)
34
assert df1.equals(df3) is False
35
36
# Datatypes are NOT checked
37
df = pl.DataFrame(
38
{
39
"foo": [1, 2, None],
40
"bar": [6.0, 7.0, None],
41
"ham": ["a", "b", None],
42
}
43
)
44
assert df.equals(df.with_columns(pl.col("foo").cast(pl.Int8))) is True
45
assert df.equals(df.with_columns(pl.col("ham").cast(pl.Categorical))) is True
46
47
# The null_equal parameter determines if None values are considered equal
48
assert df.equals(df) is True
49
assert df.equals(df, null_equal=False) is False
50
51
52
def test_equals_bad_input_type() -> None:
53
df1 = pl.DataFrame({"a": [1, 2, 3]})
54
df2 = pl.DataFrame({"a": [1, 2, 3]})
55
56
with pytest.raises(
57
TypeError,
58
match="expected `other` .*to be a 'DataFrame'.* not 'LazyFrame'",
59
):
60
df1.equals(df2.lazy()) # type: ignore[arg-type]
61
62
with pytest.raises(
63
TypeError,
64
match="expected `other` .*to be a 'DataFrame'.* not 'Series'",
65
):
66
df1.equals(pl.Series([1, 2, 3])) # type: ignore[arg-type]
67
68
class DummyDataFrameSubclass(pl.DataFrame):
69
pass
70
71
df2 = DummyDataFrameSubclass(df2)
72
73
assert df1.equals(df2) is True
74
75