Skip to content

Commit e894809

Browse files
authored
CLN: de-kludge NDFrame.interpolate (#33084)
1 parent 6a0acd9 commit e894809

File tree

1 file changed

+13
-26
lines changed

1 file changed

+13
-26
lines changed

pandas/core/generic.py

+13-26
Original file line numberDiff line numberDiff line change
@@ -6835,27 +6835,16 @@ def interpolate(
68356835
axis = self._get_axis_number(axis)
68366836

68376837
if axis == 0:
6838-
ax = self._info_axis_name
6839-
_maybe_transposed_self = self
6840-
elif axis == 1:
6841-
_maybe_transposed_self = self.T
6842-
ax = 1
6843-
6844-
ax = _maybe_transposed_self._get_axis_number(ax)
6845-
6846-
if _maybe_transposed_self.ndim == 2:
6847-
alt_ax = 1 - ax
6838+
df = self
68486839
else:
6849-
alt_ax = ax
6840+
df = self.T
68506841

6851-
if isinstance(_maybe_transposed_self.index, MultiIndex) and method != "linear":
6842+
if isinstance(df.index, MultiIndex) and method != "linear":
68526843
raise ValueError(
68536844
"Only `method=linear` interpolation is supported on MultiIndexes."
68546845
)
68556846

6856-
if _maybe_transposed_self._data.get_dtype_counts().get("object") == len(
6857-
_maybe_transposed_self.T
6858-
):
6847+
if df.ndim == 2 and np.all(df.dtypes == np.dtype(object)):
68596848
raise TypeError(
68606849
"Cannot interpolate with all object-dtype columns "
68616850
"in the DataFrame. Try setting at least one "
@@ -6865,9 +6854,9 @@ def interpolate(
68656854
# create/use the index
68666855
if method == "linear":
68676856
# prior default
6868-
index = np.arange(len(_maybe_transposed_self._get_axis(alt_ax)))
6857+
index = np.arange(len(df.index))
68696858
else:
6870-
index = _maybe_transposed_self._get_axis(alt_ax)
6859+
index = df.index
68716860
methods = {"index", "values", "nearest", "time"}
68726861
is_numeric_or_datetime = (
68736862
is_numeric_dtype(index)
@@ -6888,10 +6877,10 @@ def interpolate(
68886877
"has not been implemented. Try filling "
68896878
"those NaNs before interpolating."
68906879
)
6891-
data = _maybe_transposed_self._data
6880+
data = df._data
68926881
new_data = data.interpolate(
68936882
method=method,
6894-
axis=ax,
6883+
axis=self._info_axis_number,
68956884
index=index,
68966885
limit=limit,
68976886
limit_direction=limit_direction,
@@ -6901,15 +6890,13 @@ def interpolate(
69016890
**kwargs,
69026891
)
69036892

6893+
result = self._constructor(new_data)
6894+
if axis == 1:
6895+
result = result.T
69046896
if inplace:
6905-
if axis == 1:
6906-
new_data = self._constructor(new_data).T._data
6907-
self._update_inplace(new_data)
6897+
return self._update_inplace(result)
69086898
else:
6909-
res = self._constructor(new_data).__finalize__(self)
6910-
if axis == 1:
6911-
res = res.T
6912-
return res
6899+
return result.__finalize__(self)
69136900

69146901
# ----------------------------------------------------------------------
69156902
# Timeseries methods Methods

0 commit comments

Comments
 (0)