2016-03-04 143 views
2

我想从这个函数获取数据帧的单一变量:创建熊猫的数据帧从一个包含字典

def total_sum(self): 
    c = defaultdict(int) 
    for slot in self.data: 
     c[slot['accountLabelType']] += slot['totalPrice'] 
    return(c) 

它返回一个包含有一个关键的整体字典的变量:价值结构。

当我尝试创建熊猫的数据帧是这样的:

def source_revenue(self): 
     # df = pandas.DataFrame(self.data, columns=[ 
          # 'Source Of Business', 'Revenue']) 
     df = pandas.DataFrame({'CASH' : self.data}) 
     print(df) 

我得到这个:

        CASH 
BYD - Other      500.0 
BYD - Retail     1584.0 

但我希望它是这样的:

SOURCE       CASH 
BYD - Other      500.0 
BYD - Retail     1584.0 

但我不能做df = pandas.DataFrame({'SOURCE : self.data[0]'CASH' : self.data[1})

因为它是一本字典,我该如何正确提取两个值,以便创建数据框?

样本输出词典:

defaultdict(<class 'int'>, {'Spa': 3052, 'GS - Retail': 386, 'SCH Beverage - A La Carte': 119, 'BYD - Retail': 1584, 'BYD - Transport': 42498, 'BYD - Other': 500, 'BYD Food - Catering Banquet': 53796, 'Orchard Retail': 130, 'SCH - Retail': 375.4, 'SCH - Transport': 888, 'BYD Food - A La Carte 瓦厂食品-零点': 68365, 'XLM Beverage - A La Carte': 38, 'GS Food - A La Carte': 48, 'BYD Rooms 瓦厂房间': 5148, 'BYD Beverage - A La Carte': 39401.5, 'SCH - Food - A La Carte': 96}) 

回答

0

你的字典转换两种阵列S,一个用于密钥和其他为值:

data = { 
    'test1': 10, 
    'test2': 20, 
    'testx': 40, 
    'foo': 50, 
} 

items = data.items() 
pd.DataFrame({'keys': [i[0] for i in items], 'values': [i[1] for i in items]}) 

分配变量,因为顺序可能是确定性items是重要的。

+0

完美的作品。谢谢 ! – xavier

2

好吧第一,值应该是列表: 让我们说你的字典是dico,第一值转换为列表:

dico = { x:[y] for x,y in dico.iteritems() } 

然后建立自己的数据帧:

df = pandas.DataFrame.from_dict(dico) 
+0

ValueError:如果使用所有标量值,则必须传递一个索引''' – xavier

+0

您可以打印字典样本吗? – YOBA

+0

我编辑了与字典样本 – xavier