web-dev-qa-db-ja.com

Pandas Dataframeの選択列をNumpy配列に変換

pandasデータフレームの最初の列を除くすべてをnumpy配列に変換したいと思います。何らかの理由で、DataFrame.to_matrix()columns=パラメーターを使用しても機能しません。

df:

  viz  a1_count  a1_mean     a1_std
0   n         3        2   0.816497
1   n         0      NaN        NaN 
2   n         2       51  50.000000

X=df.as_matrix(columns=[df[1:]])を試しましたが、これはすべてのNaNsの配列を生成します

31
Adam_G

columnsパラメーターは、列名のコレクションを受け入れます。 2行のデータフレームを含むリストを渡します:

>>> [df[1:]]
[  viz  a1_count  a1_mean  a1_std
1   n         0      NaN     NaN
2   n         2       51      50]
>>> df.as_matrix(columns=[df[1:]])
array([[ nan,  nan],
       [ nan,  nan],
       [ nan,  nan]])

代わりに、必要な列名を渡します。

>>> df.columns[1:]
Index(['a1_count', 'a1_mean', 'a1_std'], dtype='object')
>>> df.as_matrix(columns=df.columns[1:])
array([[  3.      ,   2.      ,   0.816497],
       [  0.      ,        nan,        nan],
       [  2.      ,  51.      ,  50.      ]])
33
DSM

簡単な方法は、「値」プロパティdf.iloc[:,1:].valuesです

a=df.iloc[:,1:]
b=df.iloc[:,1:].values

print(type(df))
print(type(a))
print(type(b))

だから、あなたはタイプを得ることができます

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>
58
176coding

最速かつ最も簡単な方法は、.as_matrix()を使用することです。 1つの短い行:

df.iloc[:,[1,2,3]].as_matrix()

与える:

array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

列のインデックスを使用すると、異なる列名を持つ任意のデータフレームにこのコードを使用できます。

例の手順は次のとおりです。

import pandas as pd
columns = ['viz', 'a1_count', 'a1_mean', 'a1_std']
index = [0,1,2]
vals = {'viz': ['n','n','n'], 'a1_count': [3,0,2], 'a1_mean': [2,'NaN', 51], 'a1_std': [0.816497, 'NaN', 50.000000]}
df = pd.DataFrame(vals, columns=columns, index=index)

与える:

   viz  a1_count a1_mean    a1_std
0   n         3       2  0.816497
1   n         0     NaN       NaN
2   n         2      51        50

次に:

x1 = df.iloc[:,[1,2,3]].as_matrix()

与える:

array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

X1はnumpy.ndarrayです。

0
amc