{"record":{"id":"b129afab8f3ed96d","repo":"pandas-dev/pandas","slug":"cannot-create-a-cls-name-from-a-multiindex","errorCode":null,"errorMessage":"Cannot create a {cls_name} from a MultiIndex.","messagePattern":"Cannot create a (.+?) from a MultiIndex\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/datetimelike.py","lineNumber":2453,"sourceCode":"\n\n# -------------------------------------------------------------------\n# Shared Constructor Helpers\n\n\ndef ensure_arraylike_for_datetimelike(\n    data, copy: bool, cls_name: str\n) -> tuple[ArrayLike, bool]:\n    if not hasattr(data, \"dtype\"):\n        # e.g. list, tuple\n        if not isinstance(data, (list, tuple)) and np.ndim(data) == 0:\n            # i.e. generator\n            data = list(data)\n\n        data = construct_1d_object_array_from_listlike(data)\n        copy = False\n    elif isinstance(data, ABCMultiIndex):\n        raise TypeError(f\"Cannot create a {cls_name} from a MultiIndex.\")\n    else:\n        data = extract_array(data, extract_numpy=True)\n\n    if isinstance(data, IntegerArray) or (\n        isinstance(data, ArrowExtensionArray) and data.dtype.kind in \"iu\"\n    ):\n        data = data.to_numpy(\"int64\", na_value=iNaT)\n        copy = False\n    elif isinstance(data, ArrowExtensionArray):\n        data = data._maybe_convert_datelike_array()\n        data = data.to_numpy()\n        copy = False\n    elif not isinstance(data, (np.ndarray, ExtensionArray)):\n        # GH#24539 e.g. xarray, dask object\n        data = np.asarray(data)\n\n    elif isinstance(data, ABCCategorical):\n        # GH#18664 preserve tz in going DTI->Categorical->DTI","sourceCodeStart":2435,"sourceCodeEnd":2471,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/datetimelike.py#L2435-L2471","documentation":"Raised by ensure_arraylike_for_datetimelike when the supplied data is a pandas MultiIndex. A MultiIndex is a hierarchical (2-D-ish) structure and has no single axis to interpret as datetimes/timedeltas, so the datetimelike constructor refuses it rather than silently picking one level.","triggerScenarios":"pd.DatetimeIndex(multiindex), pd.to_datetime(multiindex), pd.TimedeltaIndex(multiindex), or passing a MultiIndex as the data argument to a Series/Index constructor expecting datetimelike values.","commonSituations":"Forgotten .get_level_values(n) after a groupby/set_index. Passing df.index (a MultiIndex) where a single level was intended. Refactoring that lost a level selection.","solutions":["Select the specific level: pd.DatetimeIndex(multiindex.get_level_values(level_name)).","Flatten the MultiIndex with .to_flat_index() if you genuinely need tuples-as-values, then parse with to_datetime(format=...).","Reset the index and pick the datetime column explicitly."],"exampleFix":"# before\npd.to_datetime(df.index)  # df.index is a MultiIndex\n\n# after\npd.to_datetime(df.index.get_level_values('ts'))","handlingStrategy":"type-guard","validationCode":"if isinstance(data, pd.MultiIndex):\n    raise TypeError('select a level: data.get_level_values(name)')","typeGuard":"def is_multiindex(x) -> bool:\n    return isinstance(x, pd.MultiIndex)","tryCatchPattern":"try:\n    pd.to_datetime(data)\nexcept TypeError as e:\n    if 'Cannot create a' in str(e) and 'MultiIndex' in str(e):\n        pd.to_datetime(data.get_level_values(0))\n    else: raise","preventionTips":["After set_index/groupby, explicitly select the datetime level before parsing.","Assert isinstance(df.index, pd.Index) and not MultiIndex in code that builds a datetime index."],"tags":["multiindex","constructor","datetime","type-error"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}