diff --git a/tests/test_ohlcv_date_column.py b/tests/test_ohlcv_date_column.py index 8c1cd76df..c3a243826 100644 --- a/tests/test_ohlcv_date_column.py +++ b/tests/test_ohlcv_date_column.py @@ -6,6 +6,8 @@ instead of `Date`, which would otherwise silently drop every indicator. from __future__ import annotations +import warnings + import pandas as pd import pytest @@ -68,3 +70,12 @@ class TestCleanDataframeAcrossVersions: df["close_5_sma"] # triggers calculation assert "close_5_sma" in df.columns assert df["close_5_sma"].notna().any() + + +@pytest.mark.unit +def test_cleaning_a_frame_with_undated_rows_writes_to_its_own_copy(): + raw = pd.DataFrame({"Date": ["2026-01-08", None, "2026-01-09"], "Close": ["1", "2", "x"]}) + with warnings.catch_warnings(): + warnings.simplefilter("error") + cleaned = ohlcv._clean_dataframe(raw) + assert cleaned["Close"].tolist()[0] == 1.0 diff --git a/tradingagents/dataflows/vendors/yahoo/ohlcv.py b/tradingagents/dataflows/vendors/yahoo/ohlcv.py index 4c4cacbde..6325d6172 100644 --- a/tradingagents/dataflows/vendors/yahoo/ohlcv.py +++ b/tradingagents/dataflows/vendors/yahoo/ohlcv.py @@ -105,7 +105,7 @@ def _clean_dataframe(data: pd.DataFrame) -> pd.DataFrame: the latest in-range bar (#1201).""" data = _ensure_date_column(data) data["Date"] = _normalize_dates(data["Date"]) - data = data.dropna(subset=["Date"]) + data = data.dropna(subset=["Date"]).copy() price_cols = [c for c in ["Open", "High", "Low", "Close", "Volume"] if c in data.columns] data[price_cols] = data[price_cols].apply(pd.to_numeric, errors="coerce")