私はこのようなnumpy配列を持っています:
a = np.array([35,2,160,56,120,80,1,1,0,0,1])
次に、この配列をpandas次のような論理「1列1値」のデータフレームに変換しようとしています。
columns=['age','gender','height',
'weight','ap_hi','ap_lo',
'cholesterol','gluc','smoke',
'alco','active']
values = a
df = pd.DataFrame(a,columns=columns)
このアプローチではValueErrorが発生します。渡された値の形状は(1、11)、インデックスは(11、11)を意味します。私は何を間違っていますか、それを正しい方法で実行する方法は?
ありがとう!
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
変形操作が読みにくい場合、1D配列に次元を追加するより明示的な方法は、 numpy.atleast_2d
を使用することです
pd.DataFrame(np.atleast_2d(a), columns=columns)
または、単純に[]
を追加します(ただし、列が本当に多い場合は遅くなります)。
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
提案 のDivakarに感謝します。
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
そして別の解決策、ありがとう piRSquared :
pd.DataFrame([a], [0], columns)
データフレームに必要なものに配列を変更します。
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)