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
- Convert to numeric first: series = pd.to_numeric(series, errors='coerce').interpolate().
- Drop or forward-fill non-numeric columns instead of interpolating: series.ffill().
- 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
- Run pd.to_numeric(errors='coerce') on object columns before interpolate().
- Use df.select_dtypes('number').interpolate() to skip non-numeric columns.
- For categorical/string data, use ffill()/bfill() rather than interpolate().
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
- FloatingArray does not support np.float16 dtype.
- interpolate is not implemented for dtype=
- values must be a 1D list-like
- 'values' must be a NumPy array, not
- values should be numpy array. Use the 'pd.array' function…
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)