我花了一段时间看着SO,似乎我有一个独特的问题。
我有一个如下所示的字典:
dict={
123: [2,4],
234: [6,8],
...
}
我想将具有值列表的字典转换为3列数据框,如下所示:
time, value1, value2
123, 2, 4
234, 6, 8
...
我可以跑:
pandas.DataFrame(dict)
但这会产生以下结果:
123, 234, ...
2, 6, ...
4, 8, ...
可能是一个简单的修复,但我还在拾起熊猫
答案 0 :(得分:9)
您可以按照levi的建议预处理数据,也可以在创建后转置数据框。
testdict={
123: [2,4],
234: [6,8],
456: [10, 12]
}
df = pd.DataFrame(testdict)
df = df.transpose()
print(df)
# 0 1
# 123 2 4
# 234 6 8
答案 1 :(得分:3)
如果你有大量的指数,Roger Fan的pandas.DataFrame(dict)
方法实际上相当慢,可能会引起一些人的兴趣。更快的方法是将数据预处理到单独的列表中,然后从这些列表中创建一个DataFrame。
(也许这是在levi的答案中解释的,但它现在已经消失了。)
例如,请考虑此词典dict1
,其中每个值都是一个列表。具体来说,dict1[i] = [ i*10, i*100]
(为了便于检查最终的数据帧)。
keys = range(1000)
values = zip(np.arange(1000)*10, np.arange(1000)*100)
dict1 = dict(zip(keys, values))
使用pandas方法需要大约30倍的时间。例如。
t = time.time()
test1 = pd.DataFrame(dict1).transpose()
print time.time() - t
0.118762016296
与
t = time.time()
keys = []
list1 = []
list2 = []
for k in dict1:
keys.append(k)
list1.append(dict1[k][0])
list2.append(dict1[k][1])
test2 = pd.DataFrame({'element1': list1, 'element2': list2}, index=keys)
print time.time() - t
0.00310587882996