我有一本字典,希望将其转换为数据框。由于不重要的原因,数据框必须在操作之前存在于空状态,因此我使用此代码:
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 :(得分: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
那么它会起作用