web-dev-qa-db-fra.com

Convertir des colonnes de sélection dans Pandas Dataframe en tableau Numpy

Je voudrais tout convertir sauf la première colonne d'un cadre de données de pandas en un tableau numpy. Pour une raison quelconque, l’utilisation du paramètre columns= de DataFrame.to_matrix() ne fonctionne pas.

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

J'ai essayé X=df.as_matrix(columns=[df[1:]]) mais cela donne un tableau de tous les NaNs

24
Adam_G

Le paramètre columns accepte une collection de noms de colonnes. Vous passez une liste contenant un cadre de données avec deux lignes:

>>> [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]])

À la place, transmettez les noms de colonne souhaités:

>>> 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.      ]])
26
DSM

le moyen le plus simple est la propriété "values" df.iloc[:,1:].values

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

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

alors, vous pouvez obtenir le type

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

Le moyen le plus rapide et le plus simple consiste à utiliser .as_matrix(). Une courte ligne:

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

Donne:

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

En utilisant les index des colonnes, vous pouvez utiliser ce code pour toute structure de données avec des noms de colonne différents.

Voici les étapes à suivre pour votre exemple:

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)

Donne:

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

Ensuite:

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

Donne:

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

Où x1 est numpy.ndarray.

0
amc