@@ -6081,89 +6081,191 @@ def replace(self, to_replace=None, value=None, inplace=False, limit=None,
6081
6081
6082
6082
_shared_docs ['interpolate' ] = """
6083
6083
Please note that only ``method='linear'`` is supported for
6084
- DataFrames /Series with a MultiIndex.
6084
+ DataFrame /Series with a MultiIndex.
6085
6085
6086
6086
Parameters
6087
6087
----------
6088
- method : {'linear', 'time', 'index', 'values', 'nearest', 'zero',
6089
- 'slinear', 'quadratic', 'cubic', 'barycentric', 'krogh',
6090
- 'polynomial', 'spline', 'piecewise_polynomial',
6091
- 'from_derivatives', 'pchip', 'akima'}
6088
+ method : str, default 'linear'
6089
+ Interpolation technique to use. One of:
6092
6090
6093
- * 'linear': ignore the index and treat the values as equally
6091
+ * 'linear': Ignore the index and treat the values as equally
6094
6092
spaced. This is the only method supported on MultiIndexes.
6095
- default
6096
- * 'time': interpolation works on daily and higher resolution
6097
- data to interpolate given length of interval
6098
- * 'index', 'values': use the actual numerical values of the index
6099
- * 'nearest', 'zero', 'slinear', 'quadratic', 'cubic',
6100
- 'barycentric', 'polynomial' is passed to
6101
- :class: `scipy.interpolate.interp1d`. Both 'polynomial' and
6102
- 'spline' require that you also specify an `order` (int),
6093
+ * 'time': Works on daily and higher resolution data to interpolate
6094
+ given length of interval.
6095
+ * 'index', 'values': use the actual numerical values of the index.
6096
+ * 'pad': Fill in NaNs using existing values.
6097
+ * 'nearest', 'zero', 'slinear', 'quadratic', 'cubic', 'spline',
6098
+ 'barycentric', 'polynomial': Passed to
6099
+ `scipy.interpolate.interp1d`. Both 'polynomial' and 'spline'
6100
+ require that you also specify an `order` (int),
6103
6101
e.g. ``df.interpolate(method='polynomial', order=4)``.
6104
- These use the actual numerical values of the index.
6105
- * 'krogh', 'piecewise_polynomial', 'spline', 'pchip' and 'akima'
6106
- are all wrappers around the scipy interpolation methods of
6107
- similar names. These use the actual numerical values of the
6108
- index. For more information on their behavior, see the
6109
- `scipy documentation
6110
- <http://docs.scipy.org/doc/scipy/reference/interpolate.html#univariate-interpolation>`__
6111
- and `tutorial documentation
6112
- <http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html>`__
6113
- * 'from_derivatives' refers to
6114
- :meth:`scipy.interpolate.BPoly.from_derivatives` which
6102
+ These use the numerical values of the index.
6103
+ * 'krogh', 'piecewise_polynomial', 'spline', 'pchip', 'akima':
6104
+ Wrappers around the SciPy interpolation methods of similar
6105
+ names. See `Notes`.
6106
+ * 'from_derivatives': Refers to
6107
+ `scipy.interpolate.BPoly.from_derivatives` which
6115
6108
replaces 'piecewise_polynomial' interpolation method in
6116
- scipy 0.18
6109
+ scipy 0.18.
6117
6110
6118
6111
.. versionadded:: 0.18.1
6119
6112
6120
6113
Added support for the 'akima' method.
6121
6114
Added interpolate method 'from_derivatives' which replaces
6122
- 'piecewise_polynomial' in scipy 0.18; backwards-compatible with
6123
- scipy < 0.18
6124
-
6125
- axis : {0, 1}, default 0
6126
- * 0: fill column-by-column
6127
- * 1: fill row-by-row
6128
- limit : int, default None.
6129
- Maximum number of consecutive NaNs to fill. Must be greater than 0.
6130
- limit_direction : {'forward', 'backward', 'both'}, default 'forward'
6131
- limit_area : {'inside', 'outside'}, default None
6132
- * None: (default) no fill restriction
6133
- * 'inside' Only fill NaNs surrounded by valid values (interpolate).
6134
- * 'outside' Only fill NaNs outside valid values (extrapolate).
6115
+ 'piecewise_polynomial' in SciPy 0.18; backwards-compatible with
6116
+ SciPy < 0.18
6135
6117
6118
+ axis : {0 or 'index', 1 or 'columns', None}, default None
6119
+ Axis to interpolate along.
6120
+ limit : int, optional
6121
+ Maximum number of consecutive NaNs to fill. Must be greater than
6122
+ 0.
6123
+ inplace : bool, default False
6124
+ Update the data in place if possible.
6125
+ limit_direction : {'forward', 'backward', 'both'}, default 'forward'
6136
6126
If limit is specified, consecutive NaNs will be filled in this
6137
6127
direction.
6128
+ limit_area : {`None`, 'inside', 'outside'}, default None
6129
+ If limit is specified, consecutive NaNs will be filled with this
6130
+ restriction.
6131
+
6132
+ * ``None``: No fill restriction.
6133
+ * 'inside': Only fill NaNs surrounded by valid values
6134
+ (interpolate).
6135
+ * 'outside': Only fill NaNs outside valid values (extrapolate).
6138
6136
6139
6137
.. versionadded:: 0.21.0
6140
- inplace : bool, default False
6141
- Update the NDFrame in place if possible.
6138
+
6142
6139
downcast : optional, 'infer' or None, defaults to None
6143
6140
Downcast dtypes if possible.
6144
- kwargs : keyword arguments to pass on to the interpolating function.
6141
+ **kwargs
6142
+ Keyword arguments to pass on to the interpolating function.
6145
6143
6146
6144
Returns
6147
6145
-------
6148
- Series or DataFrame of same shape interpolated at the NaNs
6146
+ Series or DataFrame
6147
+ Returns the same object type as the caller, interpolated at
6148
+ some or all ``NaN`` values
6149
6149
6150
6150
See Also
6151
6151
--------
6152
- reindex, replace, fillna
6152
+ fillna : Fill missing values using different methods.
6153
+ scipy.interpolate.Akima1DInterpolator : Piecewise cubic polynomials
6154
+ (Akima interpolator).
6155
+ scipy.interpolate.BPoly.from_derivatives : Piecewise polynomial in the
6156
+ Bernstein basis.
6157
+ scipy.interpolate.interp1d : Interpolate a 1-D function.
6158
+ scipy.interpolate.KroghInterpolator : Interpolate polynomial (Krogh
6159
+ interpolator).
6160
+ scipy.interpolate.PchipInterpolator : PCHIP 1-d monotonic cubic
6161
+ interpolation.
6162
+ scipy.interpolate.CubicSpline : Cubic spline data interpolator.
6163
+
6164
+ Notes
6165
+ -----
6166
+ The 'krogh', 'piecewise_polynomial', 'spline', 'pchip' and 'akima'
6167
+ methods are wrappers around the respective SciPy implementations of
6168
+ similar names. These use the actual numerical values of the index.
6169
+ For more information on their behavior, see the
6170
+ `SciPy documentation
6171
+ <http://docs.scipy.org/doc/scipy/reference/interpolate.html#univariate-interpolation>`__
6172
+ and `SciPy tutorial
6173
+ <http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html>`__.
6153
6174
6154
6175
Examples
6155
6176
--------
6156
-
6157
- Filling in NaNs
6177
+ Filling in ``NaN`` in a :class:`~pandas.Series` via linear
6178
+ interpolation.
6158
6179
6159
6180
>>> s = pd.Series([0, 1, np.nan, 3])
6181
+ >>> s
6182
+ 0 0.0
6183
+ 1 1.0
6184
+ 2 NaN
6185
+ 3 3.0
6186
+ dtype: float64
6160
6187
>>> s.interpolate()
6161
- 0 0
6162
- 1 1
6163
- 2 2
6164
- 3 3
6188
+ 0 0.0
6189
+ 1 1.0
6190
+ 2 2.0
6191
+ 3 3.0
6165
6192
dtype: float64
6166
6193
6194
+ Filling in ``NaN`` in a Series by padding, but filling at most two
6195
+ consecutive ``NaN`` at a time.
6196
+
6197
+ >>> s = pd.Series([np.nan, "single_one", np.nan,
6198
+ ... "fill_two_more", np.nan, np.nan, np.nan,
6199
+ ... 4.71, np.nan])
6200
+ >>> s
6201
+ 0 NaN
6202
+ 1 single_one
6203
+ 2 NaN
6204
+ 3 fill_two_more
6205
+ 4 NaN
6206
+ 5 NaN
6207
+ 6 NaN
6208
+ 7 4.71
6209
+ 8 NaN
6210
+ dtype: object
6211
+ >>> s.interpolate(method='pad', limit=2)
6212
+ 0 NaN
6213
+ 1 single_one
6214
+ 2 single_one
6215
+ 3 fill_two_more
6216
+ 4 fill_two_more
6217
+ 5 fill_two_more
6218
+ 6 NaN
6219
+ 7 4.71
6220
+ 8 4.71
6221
+ dtype: object
6222
+
6223
+ Filling in ``NaN`` in a Series via polynomial interpolation or splines:
6224
+ Both 'polynomial' and 'spline' methods require that you also specify
6225
+ an ``order`` (int).
6226
+
6227
+ >>> s = pd.Series([0, 2, np.nan, 8])
6228
+ >>> s.interpolate(method='polynomial', order=2)
6229
+ 0 0.000000
6230
+ 1 2.000000
6231
+ 2 4.666667
6232
+ 3 8.000000
6233
+ dtype: float64
6234
+
6235
+ Fill the DataFrame forward (that is, going down) along each column
6236
+ using linear interpolation.
6237
+
6238
+ Note how the last entry in column 'a' is interpolated differently,
6239
+ because there is no entry after it to use for interpolation.
6240
+ Note how the first entry in column 'b' remains ``NaN``, because there
6241
+ is no entry befofe it to use for interpolation.
6242
+
6243
+ >>> df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
6244
+ ... (np.nan, 2.0, np.nan, np.nan),
6245
+ ... (2.0, 3.0, np.nan, 9.0),
6246
+ ... (np.nan, 4.0, -4.0, 16.0)],
6247
+ ... columns=list('abcd'))
6248
+ >>> df
6249
+ a b c d
6250
+ 0 0.0 NaN -1.0 1.0
6251
+ 1 NaN 2.0 NaN NaN
6252
+ 2 2.0 3.0 NaN 9.0
6253
+ 3 NaN 4.0 -4.0 16.0
6254
+ >>> df.interpolate(method='linear', limit_direction='forward', axis=0)
6255
+ a b c d
6256
+ 0 0.0 NaN -1.0 1.0
6257
+ 1 1.0 2.0 -2.0 5.0
6258
+ 2 2.0 3.0 -3.0 9.0
6259
+ 3 2.0 4.0 -4.0 16.0
6260
+
6261
+ Using polynomial interpolation.
6262
+
6263
+ >>> df['d'].interpolate(method='polynomial', order=2)
6264
+ 0 1.0
6265
+ 1 4.0
6266
+ 2 9.0
6267
+ 3 16.0
6268
+ Name: d, dtype: float64
6167
6269
"""
6168
6270
6169
6271
@Appender (_shared_docs ['interpolate' ] % _shared_doc_kwargs )
0 commit comments