{"record":{"id":"59629e1304609e71","repo":"pandas-dev/pandas","slug":"cannot-construct-type-self-name-from-scalar","errorCode":null,"errorMessage":"Cannot construct {type(self).__name__} from scalar data. Pass a sequence instead.","messagePattern":"Cannot construct (.+?) from scalar data\\. Pass a sequence instead\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/sparse/array.py","lineNumber":425,"sourceCode":"            # TODO: make kind=None, and use data.kind?\n            data = data.sp_values\n\n        # Handle use-provided dtype\n        if isinstance(dtype, str):\n            # Two options: dtype='int', regular numpy dtype\n            # or dtype='Sparse[int]', a sparse dtype\n            try:\n                dtype = SparseDtype.construct_from_string(dtype)\n            except TypeError:\n                dtype = pandas_dtype(dtype)\n\n        if isinstance(dtype, SparseDtype):\n            if fill_value is None:\n                fill_value = dtype.fill_value\n            dtype = dtype.subtype\n\n        if is_scalar(data):\n            raise TypeError(\n                f\"Cannot construct {type(self).__name__} from scalar data. \"\n                \"Pass a sequence instead.\"\n            )\n\n        if dtype is not None:\n            dtype = pandas_dtype(dtype)\n\n        # TODO: disentangle the fill_value dtype inference from\n        # dtype inference\n        if data is None:\n            # TODO: What should the empty dtype be? Object or float?\n\n            # error: Argument \"dtype\" to \"array\" has incompatible type\n            # \"Union[ExtensionDtype, dtype[Any], None]\"; expected \"Union[dtype[Any],\n            # None, type, _SupportsDType, str, Union[Tuple[Any, int], Tuple[Any,\n            # Union[int, Sequence[int]]], List[Any], _DTypeDict, Tuple[Any, Any]]]\"\n            data = np.array([], dtype=dtype)  # type: ignore[arg-type]\n","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/sparse/array.py#L407-L443","documentation":"Raised in SparseArray.__init__ when the `data` argument is a scalar (is_scalar(data) is True). SparseArray models a 1-D sequence of stored values; a single scalar has no length to define sparsity, so pandas asks for a sequence instead. This is a TypeError, distinct from value-level validation.","triggerScenarios":"pd.arrays.SparseArray(5); pd.arrays.SparseArray(np.nan); passing a single int/float where a list was intended, e.g. SparseArray(df.loc[i,'val']).","commonSituations":"Iterating a DataFrame cell-by-cell instead of column-wise; refactors that replaced a list literal with a scalar; config values mistakenly wrapped directly.","solutions":["Wrap the scalar in a list: SparseArray([5]).","Pass the whole column/Series rather than a scalar element.","If you need a length-1 sparse array, build it explicitly: SparseArray([fill]*1) or use np.array([x])."],"exampleFix":"// before\npd.arrays.SparseArray(df.loc[0, 'val'])\n// after\npd.arrays.SparseArray([df.loc[0, 'val']])","handlingStrategy":"type-guard","validationCode":"import pandas as pd\nfrom pandas.api.types import is_scalar\n\ndef sparse_array_safe(data, **kw):\n    if is_scalar(data):\n        data = [data]\n    return pd.arrays.SparseArray(data, **kw)","typeGuard":"def is_sequence_for_sparse(data) -> bool:\n    from pandas.api.types import is_scalar\n    return not is_scalar(data)","tryCatchPattern":"try:\n    return pd.arrays.SparseArray(data)\nexcept TypeError as e:\n    if 'scalar data' in str(e):\n        return pd.arrays.SparseArray([data])\n    raise","preventionTips":["Always wrap scalars in a list before SparseArray.","Pass whole columns/Series, not single cells.","Guard with pandas.api.types.is_scalar."],"tags":["pandas","sparse","sparse-array","type-error","scalar"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}