Skip to content

Improve documentation for piecewise_polynomial interpolation #10365

Closed
@cancan101

Description

@cancan101

Using piecewise_polynomial results in ZeroDivisionError. I assume there is something else that needs to be passed (not order) to make this work:

test = pd.DataFrame({'a':range(1000)})
test.ix[3] = np.nan
test.interpolate(method='piecewise_polynomial')
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-51-ae8bbf1d5e8d> in <module>()
      1 test = pd.DataFrame({'a':range(1000)})
      2 test.ix[3] = np.nan
----> 3 test.interpolate(method='piecewise_polynomial')

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/generic.pyc in interpolate(self, method, axis, limit, inplace, downcast, **kwargs)
   2891                                           inplace=inplace,
   2892                                           downcast=downcast,
-> 2893                                           **kwargs)
   2894         if inplace:
   2895             if axis == 1:

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/internals.pyc in interpolate(self, **kwargs)
   2490 
   2491     def interpolate(self, **kwargs):
-> 2492         return self.apply('interpolate', **kwargs)
   2493 
   2494     def shift(self, **kwargs):

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/internals.pyc in apply(self, f, axes, filter, do_integrity_check, **kwargs)
   2457                                                  copy=align_copy)
   2458 
-> 2459             applied = getattr(b, f)(**kwargs)
   2460 
   2461             if isinstance(applied, list):

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/internals.pyc in interpolate(self, method, axis, index, values, inplace, limit, fill_value, coerce, downcast, **kwargs)
    770                                      inplace=inplace,
    771                                      downcast=downcast,
--> 772                                      **kwargs)
    773 
    774         raise ValueError("invalid method '{0}' to interpolate.".format(method))

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/internals.pyc in _interpolate(self, method, index, values, fill_value, axis, limit, inplace, downcast, **kwargs)
    836 
    837         # interp each column independently
--> 838         interp_values = np.apply_along_axis(func, axis, data)
    839 
    840         blocks = [make_block(interp_values,

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/numpy/lib/shape_base.pyc in apply_along_axis(func1d, axis, arr, *args, **kwargs)
     89     outshape = asarray(arr.shape).take(indlist)
     90     i.put(indlist, ind)
---> 91     res = func1d(arr[tuple(i.tolist())], *args, **kwargs)
     92     #  if res is a number, then we have a smaller output array
     93     if isscalar(res):

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/internals.pyc in func(x)
    833             return com.interpolate_1d(index, x, method=method, limit=limit,
    834                                       fill_value=fill_value,
--> 835                                       bounds_error=False, **kwargs)
    836 
    837         # interp each column independently

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/common.pyc in interpolate_1d(xvalues, yvalues, method, limit, fill_value, bounds_error, order)
   1687         result[firstIndex:][invalid] = _interpolate_scipy_wrapper(
   1688             valid_x, valid_y, new_x, method=method, fill_value=fill_value,
-> 1689             bounds_error=bounds_error, order=order)
   1690         if limit:
   1691             result[violate_limit] = np.nan

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/pandas/core/common.pyc in _interpolate_scipy_wrapper(x, y, new_x, method, fill_value, bounds_error, order)
   1747             new_x = new_x.copy()
   1748         method = alt_methods[method]
-> 1749         new_y = method(x, y, new_x)
   1750     return new_y
   1751 

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/scipy/interpolate/polyint.pyc in piecewise_polynomial_interpolate(xi, yi, x, orders, der, axis)
    925     """
    926 
--> 927     P = PiecewisePolynomial(xi, yi, orders, axis=axis)
    928     if der == 0:
    929         return P(x)

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/scipy/interpolate/polyint.pyc in __init__(self, xi, yi, orders, direction, axis)
    727 
    728         yi0 = np.asarray(yi[slice0])
--> 729         self._set_yi(yi0)
    730 
    731         self.xi = [xi[0]]

/Users/alex/.virtualenvs/work/lib/python2.7/site-packages/scipy/interpolate/polyint.pyc in _set_yi(self, yi, xi, axis)
    129                              "interpolation axis.")
    130 
--> 131         self._y_axis = (axis % yi.ndim)
    132         self._y_extra_shape = yi.shape[:self._y_axis]+yi.shape[self._y_axis+1:]
    133         self.dtype = None

ZeroDivisionError: integer division or modulo by zero

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions