2017-06-23 60 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 

那么它会工作