Панды as_matrix (), чтобы значения сохраняли порядок столбцов - PullRequest
0 голосов
/ 15 ноября 2018

В настоящее время я использую функцию .as_matrix (), чтобы гарантировать, что массив NumPy сохраняет правильный порядок столбцов; Однако это должно быть амортизировано. Как я могу гарантировать, что порядок столбцов поддерживается после того, как функция as_matrix устарела, используя предложенную функцию .values? Или есть другой способ?

Большое спасибо

Пример с as_matrix

In: prices.pct_change()[1:].as_matrix(stocks)

Out: array([-0.00283364,  0.0012285 ,  0.0014199 ,  0.00142983, -0.0053432 ])

Пример со значениями

In: prices.pct_change()[1:].values

Out: array([ 0.00142983,  0.0014199 , -0.00283364, -0.0053432 ,  0.0012285 ])

1 Ответ

0 голосов
/ 15 ноября 2018

Как вы указали, .as_matrix() устарела. (См. Ниже для сравнения с .values.)

Независимо от того, кажется, что вы можете получить столбцы в соответствующем порядке, используя .loc сначала:

import pandas as pd
import numpy as np
np.random.seed(444)

prices = pd.DataFrame(np.random.randn(200, 4), columns=list('abcd'))
columns = list('cad')
prices.pct_change().dropna().loc[:, columns].values

Вот источник для .as_matrix() против .values. Вы заметите только небольшую разницу:

def as_matrix(self, columns=None):
    warnings.warn("Method .as_matrix will be removed in a future version. "
                      "Use .values instead.", FutureWarning, stacklevel=2)
    self._consolidate_inplace()
    return self._data.as_array(transpose=self._AXIS_REVERSED,
                               items=columns)

@property
def values(self):
    self._consolidate_inplace()
    return self._data.as_array(transpose=self._AXIS_REVERSED)

Следовательно, если вы действительно хотите, вы можете просто восстановить .as_matrix() без предупреждения. (Но я бы настоятельно предпочел первый метод; это общедоступный API; он не заставляет вас иметь дело с внутренним Block типом Pandas самостоятельно.)

chg = prices.pct_change().dropna()
val = chg._data.as_array(transpose=chg._AXIS_REVERSED, items=columns)
assert np.allclose(val, prices.pct_change().dropna().loc[:, columns].values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...