使用多个键和不同长度的值(列表)从字典创建panda DataFrame

时间:2015-11-20 23:27:04

标签: python dictionary pandas dataframe

我有一个包含多个键的字典,其值(列表)长度不同。我想把它们读成一个pandas DataFrame。我希望键是列名,值是我的行。假设我有一个包含多个键的字典,我试过:

... 0-1

[Event "Harvard Cup 30´"]
...

但它仍然不起作用。我还有什么选择?

2 个答案:

答案 0 :(得分:2)

使用:

import pandas as pd 
dataframe1 = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in my_dict.iteritems()]))  

其中my_dict是您当前的字典。

答案 1 :(得分:1)

不完全确定你想要什么,我认为你得到ValueError: arrays must all be same length错误。粗略的解决方法是简单地回填每个列表,以便每个列表的长度都相同,然后简单地将其传递给DataFrame构造函数。见下面的例子:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: mydata = {'dict_{:02d}'.format(i): range(1, i+1) for i in range(1, 5)}

In [4]: mydata
Out[4]:
{'dict_01': [1],
 'dict_02': [1, 2],
 'dict_03': [1, 2, 3],
 'dict_04': [1, 2, 3, 4]}

In [5]: max_len = max([len(x) for x in mydata.values()])

In [6]: max_len
Out[6]: 4

In [7]: df = pd.DataFrame({key: vals + [np.nan]*(max_len - len(vals)) for key, vals in mydata.iteritems()})

In [8]: df
Out[8]:
   dict_01  dict_02  dict_03  dict_04
0        1        1        1        1
1      NaN        2        2        2
2      NaN      NaN        3        3
3      NaN      NaN      NaN        4