从dict创建DataFrame,将列表作为值

时间:2017-06-23 09:14:01

标签: python python-2.7 pandas 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)

任何想法如何解决这个问题?

感谢

2 个答案:

答案 0 :(得分: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转置:

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

或者可以对嵌套的list使用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]

答案 1 :(得分: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

那么它会起作用