France 10Y Government Bond Yield — Daily CSV Download
ECB Dataset · Interest Rates
France 10-Year Government Bond Yield — OAT (1993–2026)
The OAT — the second largest sovereign bond market in the euro area. The OAT-Bund spread, historically stable at 30–50 bps, widened sharply in 2024 amid French fiscal and political uncertainty, creating a new fragmentation risk for the euro area.
France as a new fragmentation risk
For most of the euro era, France was considered a near-core sovereign — the OAT-Bund spread rarely exceeded 80 bps outside of acute crises. This changed in 2024 when political instability (snap elections, coalition fragmentation) and fiscal concerns (deficit above 5% of GDP, debt approaching 115% of GDP) pushed the spread to levels not seen since the 2012 sovereign crisis.
France’s fiscal trajectory is the key variable: unlike Germany (constitutional debt brake) or Spain (improving fiscal balance), France faces structural deficits driven by pension commitments, defense spending, and political constraints on austerity. A sustained spread above 80 bps signals that markets are re-pricing France from ‘quasi-core’ to ‘semi-periphery’ — a significant shift in the euro area’s credit landscape.
Implications for ECB policy
French spread widening complicates ECB policy because France is too large to rescue through the TPI (Transmission Protection Instrument) without moral hazard concerns, yet too important to let fail. The OAT-Bund spread is now arguably as policy-relevant as the BTP-Bund spread — a development that would have been unthinkable five years ago.
CSV Data Dictionary
| Column | Type | Description |
|---|---|---|
| date | YYYY-MM-DD | First day of the reference month |
| oat_10y_yield | float | French 10-year government bond yield (% per annum, convergence criterion) |
Python Code Example
import pandas as pd
from io import StringIO
import requests
url = "https://data-api.ecb.europa.eu/service/data/IRS/M.FR.L.L40.CI.0000.EUR.N.Z"
resp = requests.get(url, params={"format": "csvdata"})
raw = pd.read_csv(StringIO(resp.text))
df = raw[["TIME_PERIOD", "OBS_VALUE"]].copy()
df.columns = ["date", "oat_10y_yield"]
df["date"] = pd.to_datetime(df["date"] + "-01")
df = df.sort_values("date").set_index("date")
df.plot(title="France 10Y OAT Yield", figsize=(12, 5))Related ECB Datasets
Source & Methodology
Source: ECB / Banque de France — Long-term convergence criterion interest rate
Series key: IRS/M.FR.L.L40.CI.0000.EUR.N.Z
License: ECB open data — free reuse with attribution.
