Skip to content

Commit 4ffb955

Browse files
authored
Treat NA as null in tabular text files (#240)
2 parents deff03c + 91592c8 commit 4ffb955

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

cfa/stf/forecasttools/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def read_tabular(path_to_file: str | Path, **kwargs: Any) -> pl.DataFrame:
4747

4848
if file_format in {"csv", "tsv"}:
4949
kwargs.setdefault("try_parse_dates", True)
50+
kwargs.setdefault("null_values", "NA")
5051

5152
if file_format == "csv":
5253
return pl.read_csv(path_to_file, **kwargs)

tests/cfa/stf/forecasttools/test_read_tabular.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,26 @@ def test_read_tabular_allows_disabling_date_parsing(tmp_path):
6666
assert result.get_column("date").to_list() == ["2026-01-15"]
6767

6868

69+
@pytest.mark.parametrize("file_format", ["csv", "tsv"])
70+
def test_read_tabular_treats_na_as_null_by_default(tmp_path, file_format):
71+
path = tmp_path / f"data.{file_format}"
72+
separator = "," if file_format == "csv" else "\t"
73+
path.write_text(f"location{separator}value\nUS{separator}NA\n")
74+
75+
result = ft.read_tabular(path)
76+
77+
assert result.get_column("value").to_list() == [None]
78+
79+
80+
def test_read_tabular_allows_overriding_null_values(tmp_path):
81+
path = tmp_path / "data.csv"
82+
path.write_text("value\nNA\n")
83+
84+
result = ft.read_tabular(path, null_values="missing")
85+
86+
assert result.get_column("value").to_list() == ["NA"]
87+
88+
6989
def test_read_tabular_corrects_timezone_naive_parquet_timestamps(tmp_path):
7090
path = tmp_path / "timestamps.parquet"
7191
tokyo = ZoneInfo("Asia/Tokyo")

0 commit comments

Comments
 (0)