2017-06-23 85 views
1

我有一本字典並希望將其轉換爲數據框。對於不是很重要的原因,數據幀之前必須運行在一個空的狀態,進出口使用此代碼存在:從字典中創建數據框,並將列表作爲值

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

你應該刪除index = [0],因爲d ['p3']是二維的,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_dictT轉:

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

或者是嵌套list可能服用字典理解:

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」應該是列,而不是行....並且你的最後一個例子會產生兩行 – Diego

+0

請檢查編輯答案。 – 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 

那麼它會工作