在for循环中向Pandas Dataframe添加数据

时间:2017-01-10 19:49:12

标签: python pandas

我正在尝试从多个词典填充pandas数据帧。每个词典的格式如下:

{'Miami': {'DrPepper': '5', 'Pepsi': '8'}}

{'Atlanta:{'DrPepper':'10','Pepsi':'25'}}

最终我想要的是一个看起来像这样的数据帧(在此之后我计划使用pandas进行一些数据转换,然后将数据帧输出到制表符分隔文件):

      DrPepper  Pepsi
Miami    5       8
Atlanta  10      25

2 个答案:

答案 0 :(得分:2)

您可以concat使用从DataFrames创建的DataFrame.from_dict dict

d1 = {'Miami': {'DrPepper': '5', 'Pepsi': '8'}}
d2 = {'Atlanta':{'DrPepper':'10','Pepsi':'25'}}

print (pd.DataFrame.from_dict(d1, orient='index'))
      Pepsi DrPepper
Miami     8        5

print (pd.concat([pd.DataFrame.from_dict(d1, orient='index'),
                  pd.DataFrame.from_dict(d2, orient='index')]))
        Pepsi DrPepper
Miami       8        5
Atlanta    25       10

另一个transpose T的解决方案:

print (pd.DataFrame(d1))
         Miami
DrPepper     5
Pepsi        8

print (pd.concat([pd.DataFrame(d1).T, pd.DataFrame(d2).T]))
        DrPepper Pepsi
Miami          5     8
Atlanta       10    25

也可以使用list comprehension

L = [d1,d2]
print (pd.concat([pd.DataFrame(d).T for d in L]))
        DrPepper Pepsi
Miami          5     8
Atlanta       10    25

答案 1 :(得分:2)

如果您不介意使用其他库,可以使用toolz.merge组合所有词典,然后DataFrame.from_dict

import toolz

d1 = {'Miami': {'DrPepper': '5', 'Pepsi': '8'}}
d2 = {'Atlanta': {'DrPepper': '10', 'Pepsi': '25'}}

df = pd.DataFrame.from_dict(toolz.merge(d1, d2), orient='index')

此方法假定您没有重复索引值(即城市名称)。如果这样做,重复将被优先使用的词典列表中的最后一个覆盖。

结果输出:

        DrPepper Pepsi
Atlanta       10    25
Miami          5     8