Pandas:迭代字典时逐行添加

时间:2015-01-29 21:07:55

标签: python pandas dataframe

我有两个大型词典,列表中有值。出于这个问题的目的,我将它们命名为字典foo和bar。

foo = {}
foo['a'] = []
foo['b'] = []
foo['a'].append(1)
foo['a'].append(2)
foo['b'].append(10)
foo['b'].append(30)

bar = {}
bar['a'] = []
bar['a'].append(5)
bar['a'].append(7)
bar['b'] = []
bar['b'].append(8)
bar['b'].append(34)
bar['b'].append(32)

通过迭代一个字典,我想构建一个数据框,它将使我跟踪数据表:

id | viewed | presented
-----------------------
a  | [1,2]  | [5,7]
-----------------------
b  | [10,30]| [8,32,34]

所以我做了以下事情:

import pandas as pd
df = pd.DataFrame(columns=['id', 'viewed', 'presented'])
for item in foo:
    df = pd.Series({'id':item, 'viewed':foo[item], 'presented':bar[item]})

但是当我打印数据框时,它会遗漏foo[a]bar[a]的结果

>>> df
id                     b
presented    [8, 34, 32]
viewed          [10, 30]
dtype: object
>>> len(df.index)
3

看起来它越过了写而不是增加数据帧的索引来记录下一个元素。解决此问题的最佳方法是什么,并在此情况下按需要插入行。我查看了另外两个没有解决方案的stackoverflow问题。

1 个答案:

答案 0 :(得分:2)

您需要做的就是:

df = pd.DataFrame({'viewed':foo, 'presented':bar}).reset_index()
df.columns = ['id', 'viewed', 'presented']

您将获得所需的数据框:

   id    viewed    presented
0  a    [1, 2]       [5, 7]
1  b  [10, 30]  [8, 34, 32]