web-dev-qa-db-fra.com

Convertir le tableau Numpy en Pandas DataFrame colonne par ligne (comme une seule ligne)

J'ai un tableau numpy ressemblant à ceci:

a = np.array([35,2,160,56,120,80,1,1,0,0,1])

Ensuite, j'essaie de transformer ce tableau en pandas dataframe avec la logique "une colonne-une valeur" comme ceci:

columns=['age','gender','height',
     'weight','ap_hi','ap_lo',
     'cholesterol','gluc','smoke',
     'alco','active']

values = a

df = pd.DataFrame(a,columns=columns)

Cette approche soulève ValueError: la forme des valeurs passées est (1, 11), les indices impliquent (11, 11). Qu'est-ce que je fais mal et comment le faire correctement?

Merci!

10
Keithx

Vous avez besoin numpy.reshape :

columns=['age','gender','height',
     'weight','ap_hi','ap_lo',
     'cholesterol','gluc','smoke',
     'alco','active']

a = np.array([35,2,160,56,120,80,1,1,0,0,1])

df = pd.DataFrame(a.reshape(-1, len(a)),columns=columns)
print (df)
   age  gender  height  weight  ap_hi  ap_lo  cholesterol  gluc  smoke  alco  \
0   35       2     160      56    120     80            1     1      0     0   

   active  
0       1  

Si l'opération de remodelage n'est pas claire à lire, une façon plus explicite d'ajouter une dimension au tableau 1d consiste à utiliser numpy.atleast_2d

pd.DataFrame(np.atleast_2d(a), columns=columns)

Ou ajoutez plus simplement [] (mais plus lent si beaucoup de colonnes):

df = pd.DataFrame([a],columns=columns)
print (df)
   age  gender  height  weight  ap_hi  ap_lo  cholesterol  gluc  smoke  alco  \
0   35       2     160      56    120     80            1     1      0     0   

   active  
0       1  

Merci Divakar pour suggestion :

df = pd.DataFrame(a[None],columns=columns)
print (df)
   age  gender  height  weight  ap_hi  ap_lo  cholesterol  gluc  smoke  alco  \
0   35       2     160      56    120     80            1     1      0     0   

   active  
0       1  

Et une autre solution, merci piRSquared :

pd.DataFrame([a], [0], columns) 
14
jezrael

Remodelez simplement le tableau selon vos besoins pour la trame de données.

import pandas as pd 
import numpy as np

a = np.array([35,2,160,56,120,80,1,1,0,0,1])

columns=['age','gender','height',
 'weight','ap_hi','ap_lo',
 'cholesterol','gluc','smoke',
 'alco','active']

df = pd.DataFrame(np.reshape(a, (1,len(a))),columns=columns)
1
Alex F