diff --git a/pandas/io/stata.py b/pandas/io/stata.py index 34d95fb59a21c..474663a85216d 100644 --- a/pandas/io/stata.py +++ b/pandas/io/stata.py @@ -2611,7 +2611,7 @@ def _check_column_names(self, data: DataFrame) -> DataFrame: # Check date conversion, and fix key if needed if self._convert_dates: for c, o in zip(columns, original_columns): - if c != o: + if c != o and o in self._convert_dates: self._convert_dates[c] = self._convert_dates[o] del self._convert_dates[o] diff --git a/pandas/tests/io/test_stata.py b/pandas/tests/io/test_stata.py index 9288b98d79fbe..5ed14806d6346 100644 --- a/pandas/tests/io/test_stata.py +++ b/pandas/tests/io/test_stata.py @@ -2587,3 +2587,30 @@ def test_many_strl(temp_file, version): lbls = ["".join(v) for v in itertools.product(*([string.ascii_letters] * 3))] value_labels = {"col": {i: lbls[i] for i in range(n)}} df.to_stata(temp_file, value_labels=value_labels, version=version) + + +@pytest.mark.parametrize("version", [114, 117, 118, 119, None]) +def test_convert_dates_key_handling(tmp_path, version): + + temp_file = tmp_path / "test.dta" + df = DataFrame({"old_name": [1, 2, 3], "some_other_name": [4, 5, 6]}) + + # Case 1: Key exists in convert_dates + convert_dates = {"old_name": "converted_date"} + df_renamed = df.rename(columns={"old_name": "new_name"}) # Mimic column renaming + df_renamed.to_stata(temp_file, convert_dates=convert_dates) + + result = read_stata(temp_file) + assert "new_name" in result.columns + assert "old_name" not in result.columns + assert result["new_name"].tolist() == ["converted_date", "converted_date", "converted_date"] + + # Case 2: Key does not exist in convert_dates + convert_dates = {"some_other_name": "converted_date"} + df_renamed = df.rename(columns={"old_name": "new_name"}) # Mimic column renaming + df_renamed.to_stata(temp_file, convert_dates=convert_dates) + + result = read_stata(temp_file) + assert "new_name" not in result.columns + assert "old_name" in result.columns + assert result["some_other_name"].tolist() == ["converted_date", "converted_date", "converted_date"]