Skip to content

Commit 21b7cf1

Browse files
committed
TST: xfail sparse roundtrip tests for Parquet and Feather (preserve_sparse flag)
1 parent dfba035 commit 21b7cf1

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import numpy as np
2+
import pytest
3+
4+
import pandas as pd
5+
6+
pa = pytest.importorskip("pyarrow")
7+
8+
xfail_sparse = pytest.mark.xfail(
9+
reason="pending implementation of preserve_sparse for Feather",
10+
strict=False,
11+
)
12+
13+
14+
@xfail_sparse
15+
@pytest.mark.parametrize(
16+
"subtype, fill_value, data",
17+
[
18+
("int64", 0, [0, 0, 3, 0, 5]),
19+
("float64", 0.0, [0.0, 0.0, 1.5, 0.0, 2.5]),
20+
("boolean", False, [False, False, True, False, True]),
21+
],
22+
)
23+
def test_feather_sparse_roundtrip(tmp_path, subtype, fill_value, data):
24+
path = tmp_path / "out.feather"
25+
s = pd.Series(pd.arrays.SparseArray(data, fill_value=fill_value))
26+
df = pd.DataFrame({"s": s, "x": np.arange(len(s))})
27+
28+
df.to_feather(path, preserve_sparse=True)
29+
df2 = pd.read_feather(path, preserve_sparse=True)
30+
31+
assert isinstance(df2["s"].dtype, pd.SparseDtype)
32+
assert df2["s"].dtype.fill_value == fill_value
33+
pd.testing.assert_series_equal(
34+
df2["s"].sparse.to_dense(), s.sparse.to_dense(), check_dtype=False
35+
)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import numpy as np
2+
import pytest
3+
4+
import pandas as pd
5+
6+
pa = pytest.importorskip("pyarrow")
7+
8+
xfail_sparse = pytest.mark.xfail(
9+
reason="pending implementation of preserve_sparse for Parquet",
10+
strict=False,
11+
)
12+
13+
14+
@xfail_sparse
15+
@pytest.mark.parametrize(
16+
"subtype, fill_value, data",
17+
[
18+
("int64", 0, [0, 0, 3, 0, 5]),
19+
("float64", 0.0, [0.0, 0.0, 1.5, 0.0, 2.5]),
20+
("boolean", False, [False, False, True, False, True]),
21+
],
22+
)
23+
def test_parquet_sparse_roundtrip(tmp_path, subtype, fill_value, data):
24+
path = tmp_path / "out.parquet"
25+
s = pd.Series(pd.arrays.SparseArray(data, fill_value=fill_value))
26+
df = pd.DataFrame({"s": s, "x": np.arange(len(s))})
27+
28+
df.to_parquet(path, preserve_sparse=True)
29+
df2 = pd.read_parquet(path, preserve_sparse=True)
30+
31+
assert isinstance(df2["s"].dtype, pd.SparseDtype)
32+
assert df2["s"].dtype.fill_value == fill_value
33+
pd.testing.assert_series_equal(
34+
df2["s"].sparse.to_dense(), s.sparse.to_dense(), check_dtype=False
35+
)

0 commit comments

Comments
 (0)