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!
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)
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)