2016-03-04 134 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