2017-06-23 14 views
1

辞書があり、それをデータフレームに変換したい。イムは、このコードを使用して重要でない理由により、データフレームは空の状態で操作する前に存在している必要があります:私はそれをして失敗したときの値のいずれかがリストである場合を除き、正常に動作しますdictからリストとして値を指定してDataFrameを作成する

dfResult = pd.DataFrame() 
d={} 
d['p1']=123 
d['p2']='foo' 
#d['p3']= [10,10] 
df = pd.DataFrame(d, index=[0]) #index is irrelevant 

このメッセージは

ValueError: could not broadcast input array from shape (2) into shape (1) 

どのようにすれば問題を解決できますか?

おかげ

+0

d ['p3']は2次元なので、インデックス= [0]を削除してください。pythonはg df.index = newIndexを使用してインデックスを変更することができます。 – Tbaki

答えて

2

私はあなたが列名を指定することができると思います。

d={} 
d['p1']=123 
d['p2']='foo' 
d['p3']= [10,10] 
df = pd.DataFrame({'col':d}) 
print (df) 
     col 
p1  123 
p2  foo 
p3 [10, 10] 

か、可能であるが、Seriesを作成します。

s = pd.Series(d) 
print (s) 
p1   123 
p2   foo 
p3 [10, 10] 
dtype: object 

また私DataFrameコンストラクタ作品ではなく、リストの値がに変換されますスカラー:

d={} 
d['p1']=123 
d['p2']='foo' 
d['p3']= [10,5] 
df = pd.DataFrame(d) 
print (df) 
    p1 p2 p3 
0 123 foo 10 
1 123 foo 5 

必要な列名の場合は、使用可能性DataFrame.from_dictで、Tで移調:ネストされたlistのため

df = pd.DataFrame.from_dict(d, orient='index').T 
print (df) 
    p2  p3 p1 
0 foo [10, 10] 123 

それとも可能です利用のdictの理解:

print ({k:[v] for k,v in d.items()}) 
{'p2': ['foo'], 'p3': [[10, 10]], 'p1': [123]} 

df = pd.DataFrame({k:[v] for k,v in d.items()}) 
print (df) 
    p1 p2  p3 
0 123 foo [10, 10] 
+0

お返事ありがとうございますが、 "ps"は列ではなく、行であると考えられています。最後の例では2行が出力されます – Diego

+0

Please編集された回答を確認してください。 – jezrael

+0

転置は完璧です、ありがとう:) – Diego

1
dfResult = pd.DataFrame() 
d={} 
d['p1']=123 
d['p2']='foo' 
d['p3']= [10,10] 
d = {k:[v] if type(v) is list else v for k,v in d.items()} 
df = pd.DataFrame(d, index=[0]) #index is irrelevant 

それが

に動作します
関連する問題