np.perctile () возвращает UFuncTypeError: ufun c 'multiply' не может использовать операнды с типами dtype (' - PullRequest
0 голосов
/ 25 марта 2020

Я хочу создать график QQ с Matplotlib, используя формулу @ImportanceOfBeingErnest описывает здесь .

Входные данные поступают из столбцов pd.DataFrame. Эти значения необходимо преобразовать в ndarrays перед передачей в matplotlib. Как мне преобразовать pandas DatetimeIndex так, чтобы это допустимый ввод в вызов np.percentile ()?

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(y2.index.min(), y2.index.max(), dtype='datetime64[D]')
y = y2['close'].values

percs = np.linspace(0, 100, 21)
qn_x = np.percentile(x, percs)
qn_y = np.percentile(y, percs)

plt.plot(qn_x,qn_y, ls="", marker="o")

x = np.linspace(np.min((qn_x.min(),qn_y.min())), np.max((qn_x.max(),qn_y.max())))
plt.plot(x,x, color="k", ls="--")

plt.show()

Обратный путь:

---------------------------------------------------------------------------
UFuncTypeError                            Traceback (most recent call last)
<ipython-input-18-c11d868c3be2> in <module>
      9 
     10 percs = np.linspace(0,100,21)
---> 11 qn_x = np.percentile(x, percs)
     12 qn_y = np.percentile(y, percs)
     13 

<__array_function__ internals> in percentile(*args, **kwargs)

~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in percentile(a, q, axis, out, overwrite_input, interpolation, keepdims)
   3704         raise ValueError("Percentiles must be in the range [0, 100]")
   3705     return _quantile_unchecked(
-> 3706         a, q, axis, out, overwrite_input, interpolation, keepdims)
   3707 
   3708 

~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in _quantile_unchecked(a, q, axis, out, overwrite_input, interpolation, keepdims)
   3824     r, k = _ureduce(a, func=_quantile_ureduce_func, q=q, axis=axis, out=out,
   3825                     overwrite_input=overwrite_input,
-> 3826                     interpolation=interpolation)
   3827     if keepdims:
   3828         return r.reshape(q.shape + k)

~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in _ureduce(a, func, **kwargs)
   3401         keepdim = (1,) * a.ndim
   3402 
-> 3403     r = func(a, **kwargs)
   3404     return r, keepdim
   3405 

~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in _quantile_ureduce_func(a, q, axis, out, overwrite_input, interpolation, keepdims)
   3939             n = np.isnan(ap[-1:, ...])
   3940 
-> 3941         x1 = take(ap, indices_below, axis=axis) * weights_below
   3942         x2 = take(ap, indices_above, axis=axis) * weights_above
   3943 

UFuncTypeError: ufunc 'multiply' cannot use operands with types dtype('<M8[D]') and dtype('float64')

Я понимаю, что scipy.stats.probplot может сделать это, однако, это слишком абстрактно для моего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...