pandas-dev/pandas · error · TypeError

Cannot interpolate with

Error message

Cannot interpolate with {self.dtype} dtype

What it means

Raised by NumpyExtensionArray.interpolate when self.dtype._is_numeric is False. Interpolation requires numeric ordering (linear, time, index methods all need arithmetic on the values), so non-numeric NumpyExtensionArrays (object, string, bytes, datetime-with-object-fallback) are rejected. The dtype name is interpolated into the message.

Solutions

  1. Convert to numeric first: series = pd.to_numeric(series, errors='coerce').interpolate().
  2. Drop or forward-fill non-numeric columns instead of interpolating: series.ffill().
  3. Select only numeric columns before interpolate: df.select_dtypes('number').interpolate().

Example fix

# before
s = pd.Series(['1', '2', None, '4'], dtype=object)
s.interpolate()  # raises

# after
pd.to_numeric(s, errors='coerce').interpolate()
Defensive patterns

Strategy: validation

Validate before calling

import pandas as pd

def interpolate_numeric(series):
    if series.dtype == object or series.dtype.kind in 'OUS':
        series = pd.to_numeric(series, errors='coerce')
    return series.interpolate()

Type guard

def is_numeric_series(series) -> bool:
    return series.dtype.kind in 'iufcb'

Try / catch

try:
    s.interpolate()
except TypeError as e:
    if 'Cannot interpolate' in str(e):
        pd.to_numeric(s, errors='coerce').interpolate()
    else:
        raise

Prevention

When it happens

Trigger: series = pd.Series(['1', '2', None, '4'], dtype=object); series.interpolate() — object dtype. A string-dtype Series with NaNs calling interpolate. A NumpyExtensionArray of datetime64 stored as object.

Common situations: Data loaded as strings/object that should be numeric; calling df.interpolate() on a mixed-type DataFrame where some columns are object; forgetting pd.to_numeric before interpolation.

Related errors


AI-assisted analysis of pandas-dev/pandas@3b7651241d (2026-08-11). Data as JSON: /api/errors/52fc959e254ad5e6. Report an issue: GitHub.

Appendix: source

Thrown at pandas/core/arrays/numpy_.py:398

    def interpolate(
        self,
        *,
        method: InterpolateOptions,
        axis: int,
        index: Index,
        limit,
        limit_direction,
        limit_area,
        copy: bool,
        **kwargs,
    ) -> Self:
        """
        See NDFrame.interpolate.__doc__.
        """
        # NB: we return type(self) even if copy=False
        if not self.dtype._is_numeric:
            raise TypeError(f"Cannot interpolate with {self.dtype} dtype")

        if not copy:
            out_data = self._ndarray
        else:
            out_data = self._ndarray.copy()

        # TODO: assert we have floating dtype?
        missing.interpolate_2d_inplace(
            out_data,
            method=method,
            axis=axis,
            index=index,
            limit=limit,
            limit_direction=limit_direction,
            limit_area=limit_area,
            **kwargs,
        )
        if not copy:

View on GitHub (pinned to 3b7651241d)