DOC: update the pandas.Series/DataFrame.interpolate docstring (#20270) · pandas-dev/pandas@8bb2cc1 (original) (raw)

`@@ -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

``

`-

`

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

``

`-

`

6114

``

`` -

:meth:scipy.interpolate.BPoly.from_derivatives which

``

``

6102

`+

These use the numerical values of the index.

`

``

6103

`+

`

``

6104

`+

Wrappers around the SciPy interpolation methods of similar

`

``

6105

`` +

names. See Notes.

``

``

6106

`+

`

``

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

``

`-

`

6127

``

`-

`

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

``

`-

`

6133

``

`-

`

6134

``

`-

`

``

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

`+

`

``

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

`+

`

``

6134

`+

(interpolate).

`

``

6135

`+

`

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)

`