繁体   English   中英

将包含值列表的字典转换为数据帧

[英]Converting a dictionary with lists for values into a dataframe

我花了一段时间看着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, ...

可能是一个简单的修复,但我还在拾起大熊猫

您可以像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

如果你有大量的索引, pandas.DataFrame(dict)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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM