{
  "id": "data/csv-float-precision-loss",
  "signature": "CSV float precision loss when reading/writing with pandas read_csv",
  "signature_zh": "使用pandas read_csv读写CSV时浮点数精度丢失",
  "regex": "(?:Precision loss|float64|float precision|read_csv.*float)",
  "domain": "data",
  "category": "data_error",
  "subcategory": null,
  "root_cause": "pandas read_csv by default uses float64 which truncates float values beyond 15-17 significant digits, causing silent precision loss for high-precision data like scientific measurements or financial transactions.",
  "root_cause_type": "generic",
  "root_cause_zh": "pandas read_csv默认使用float64，会截断超过15-17位有效数字的浮点数，导致科学测量或金融交易等高精度数据静默丢失精度。",
  "versions": [
    {
      "version": "pandas 1.5.3",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "pandas 2.0.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "pandas 2.1.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "",
      "why_fails": "This disables all numeric processing and may break downstream operations expecting float types; also increases memory usage significantly.",
      "fail_rate": 0.6,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "Rounding cannot recover lost precision; the original value is already truncated during CSV parsing.",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "float64 is the default and still truncates; need higher precision type like float128 or decimal.",
      "fail_rate": 0.8,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Use pandas.read_csv with dtype=Decimal for critical columns: `import decimal; df = pd.read_csv('data.csv', dtype={'amount': decimal.Decimal})`",
      "success_rate": 0.9,
      "how": "Use pandas.read_csv with dtype=Decimal for critical columns: `import decimal; df = pd.read_csv('data.csv', dtype={'amount': decimal.Decimal})`",
      "condition": "",
      "sources": []
    },
    {
      "action": "Read CSV as string and convert to Decimal after: `df = pd.read_csv('data.csv', dtype=str); from decimal import Decimal; df['amount'] = df['amount'].apply(Decimal)`",
      "success_rate": 0.88,
      "how": "Read CSV as string and convert to Decimal after: `df = pd.read_csv('data.csv', dtype=str); from decimal import Decimal; df['amount'] = df['amount'].apply(Decimal)`",
      "condition": "",
      "sources": []
    },
    {
      "action": "Use numpy.float128 if available: `df = pd.read_csv('data.csv', dtype={'amount': np.float128})`",
      "success_rate": 0.75,
      "how": "Use numpy.float128 if available: `df = pd.read_csv('data.csv', dtype={'amount': np.float128})`",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Use pandas.read_csv with dtype=Decimal for critical columns: `import decimal; df = pd.read_csv('data.csv', dtype={'amount': decimal.Decimal})`",
    "Read CSV as string and convert to Decimal after: `df = pd.read_csv('data.csv', dtype=str); from decimal import Decimal; df['amount'] = df['amount'].apply(Decimal)`",
    "Use numpy.float128 if available: `df = pd.read_csv('data.csv', dtype={'amount': np.float128})`"
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html",
  "official_doc_section": null,
  "error_code": null,
  "verification_tier": "ai_generated",
  "confidence": 0.85,
  "fix_success_rate": 0.88,
  "resolvable": "true",
  "first_seen": "2023-06-15",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}