{"record":{"id":"645da3b018f50624","repo":"pandas-dev/pandas","slug":"passing-in-timedelta-dtype-with-no-precision-is","errorCode":null,"errorMessage":"Passing in 'timedelta' dtype with no precision is not allowed. Please pass in 'timedelta64[ns]' instead.","messagePattern":"Passing in 'timedelta' dtype with no precision is not allowed\\. Please pass in 'timedelta64\\[ns\\]' instead\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/timedeltas.py","lineNumber":1413,"sourceCode":"    errors to be ignored; they are caught and subsequently ignored at a\n    higher level.\n    \"\"\"\n    # coerce Index to np.ndarray, converting string-dtype if necessary\n    values = np.asarray(data, dtype=np.object_)\n\n    result = array_to_timedelta64(values, unit=unit, errors=errors)\n    return result\n\n\ndef _validate_td64_dtype(dtype) -> DtypeObj:\n    dtype = pandas_dtype(dtype)\n    if dtype == np.dtype(\"m8\"):\n        # no precision disallowed GH#24806\n        msg = (\n            \"Passing in 'timedelta' dtype with no precision is not allowed. \"\n            \"Please pass in 'timedelta64[ns]' instead.\"\n        )\n        raise ValueError(msg)\n\n    if not lib.is_np_dtype(dtype, \"m\"):\n        raise ValueError(f\"dtype '{dtype}' is invalid, should be np.timedelta64 dtype\")\n    elif not is_supported_dtype(dtype):\n        raise ValueError(\"Supported timedelta64 resolutions are 's', 'ms', 'us', 'ns'\")\n\n    return dtype\n","sourceCodeStart":1395,"sourceCodeEnd":1421,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/timedeltas.py#L1395-L1421","documentation":"Raised by _validate_td64_dtype when dtype equals numpy 'm8' (timedelta64 with no resolution). Pandas refuses bare 'timedelta' because nanosecond resolution is the only representation it stores; you must specify timedelta64[ns]. GH#24806.","triggerScenarios":"`pd.TimedeltaIndex(..., dtype='timedelta')`, `.astype('timedelta')`, or `pd.Series(..., dtype='timedelta')`. Anywhere a unit-less timedelta dtype string is supplied.","commonSituations":"Copy-pasted dtype strings; tutorials using older numpy syntax; user input not validated against supported resolutions.","solutions":["Specify the resolution explicitly: 'timedelta64[ns]'.","If accepting user dtype strings, validate/normalize before passing to pandas.","Use pd.to_timedelta() to infer dtype rather than passing a bare dtype."],"exampleFix":"// before\ns = df['x'].astype('timedelta')\n\n// after\ns = df['x'].astype('timedelta64[ns]')","handlingStrategy":"validation","validationCode":"if str(dtype) == 'timedelta':\n    dtype = 'timedelta64[ns]'","typeGuard":"def has_td_resolution(dtype_str) -> bool:\n    return dtype_str not in ('timedelta', 'm8', 'timedelta64')","tryCatchPattern":"try:\n    s = df['x'].astype(dtype)\nexcept ValueError as e:\n    if 'no precision' in str(e):\n        s = df['x'].astype('timedelta64[ns]')\n    else:\n        raise","preventionTips":["Always specify [ns] for timedelta dtypes.","Normalize user dtype strings.","Use to_timedelta() to avoid manual dtype strings."],"tags":["timedelta","dtype","valueerror","gh-24806"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}