{"record":{"id":"69d73030927b1407","repo":"pandas-dev/pandas","slug":"value-should-be-a-self-scalar-type-name-o","errorCode":null,"errorMessage":"value should be a '{self._scalar_type.__name__}' or 'NaT'. Got {msg_got} instead.","messagePattern":"value should be a '(.+?)' or 'NaT'\\. Got (.+?) instead\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/datetimelike.py","lineNumber":558,"sourceCode":"            listlike inputs are allowed.\n        unbox : bool, default True\n            Whether to unbox the result before returning.  Note: unbox=False\n            skips the setitem compatibility check.\n\n        Returns\n        -------\n        self._scalar_type or NaT\n        \"\"\"\n        if isinstance(value, self._scalar_type):\n            pass\n\n        elif isinstance(value, str):\n            # NB: Careful about tzawareness\n            try:\n                value = self._scalar_from_string(value)\n            except ValueError as err:\n                msg = self._validation_error_message(value, allow_listlike)\n                raise TypeError(msg) from err\n\n        elif is_valid_na_for_dtype(value, self.dtype):\n            # GH#18295\n            value = NaT\n\n        elif isna(value):\n            # if we are dt64tz and value is dt64(\"NaT\"), dont cast to NaT,\n            #  or else we'll fail to raise in _unbox_scalar\n            msg = self._validation_error_message(value, allow_listlike)\n            raise TypeError(msg)\n\n        elif isinstance(value, self._recognized_scalars):\n            # error: Argument 1 to \"Timestamp\" has incompatible type \"object\"; expected\n            # \"integer[Any] | float | str | date | datetime | datetime64\"\n            value = self._scalar_type(value)  # type: ignore[arg-type]\n\n        else:\n            msg = self._validation_error_message(value, allow_listlike)","sourceCodeStart":540,"sourceCodeEnd":576,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/datetimelike.py#L540-L576","documentation":"Raised by DatetimeLikeArrayMixin._validate_scalar when a string value cannot be parsed as the expected scalar type (Timestamp for datetime, Timedelta for timedelta, Period for period). The scalar setter tries _scalar_from_string and on ValueError builds this TypeError via _validation_error_message. It is the allow_listlike=False (scalar-only) path.","triggerScenarios":"Setting a datetime/timedelta/period array element to a malformed string like 'not-a-date', '2020-13-99', or 'abc'; or to a string with the wrong unit/frequency for the dtype.","commonSituations":"User-supplied date strings with mixed formats, locale-specific date formats that pandas cannot infer, or strings that look like timestamps but belong to a different scalar domain (e.g. '3 days' set into a datetime array).","solutions":["Pre-parse with pd.to_datetime(...) / pd.to_timedelta(...) so only valid scalars reach the setter.","Validate the string format before assignment (regex or try/except around Timestamp()).","Use NaT for missing values instead of placeholder strings."],"exampleFix":"// before\narr = pd.date_range('2020', periods=3)._data\narr[0] = 'not-a-date'  # TypeError: value should be a 'Timestamp' or 'NaT'\n\n// after\narr[0] = pd.Timestamp('2020-01-01')","handlingStrategy":"validation","validationCode":"import pandas as pd\ndef parse_scalar_for(arr, value):\n    try:\n        return arr._scalar_from_string(value)\n    except ValueError:\n        return pd.NaT","typeGuard":"import pandas as pd\nfrom typing import Any\n\ndef is_valid_datetime_string(s: Any) -> bool:\n    try:\n        pd.Timestamp(s)\n        return True\n    except (ValueError, TypeError):\n        return False","tryCatchPattern":"try:\n    arr[0] = s\nexcept TypeError as e:\n    if 'value should be a' in str(e) and 'NaT' in str(e):\n        import pandas as pd\n        arr[0] = pd.Timestamp(s) if s else pd.NaT\n    else:\n        raise","preventionTips":["Pre-parse user date strings with pd.to_datetime(..., errors='coerce').","Use NaT for missing values instead of empty strings."],"tags":["datetime","scalar","validation"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}