熊猫as_matrix()的值保持列顺序

时间:2018-11-14 21:51:41

标签: python pandas

我目前使用.as_matrix()函数,以确保numpy数组保持正确的列顺序;但是,这是要折旧的。通过使用建议的.values函数折旧as_matrix函数后,如何确保保持列顺序?还是有另一种方法?

非常感谢

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 :(得分:1)

您指出,.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的{​​{3}}。您会发现只有细微的差别:

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)
相关问题