2014-12-27 84 views
10

我已經成功地做到這一點使用:從詞典構造熊貓數據框形式{索引:行值的列表}

dft = pd.DataFrame.from_dict({ 
        0: [50, 45, 00, 00], 
        1: [53, 48, 00, 00], 
        2: [56, 53, 00, 00], 
        3: [54, 49, 00, 00], 
        4: [53, 48, 00, 00], 
        5: [50, 45, 00, 00] 
        }, orient='index' 
        ) 

做過這樣的,構造看上去就像數據框使其易於閱讀/編輯:

>>> dft 
    0 1 2 3 
0 50 45 0 0 
1 53 48 0 0 
2 56 53 0 0 
3 54 49 0 0 
4 53 48 0 0 
5 50 45 0 0 

DataFrame.from_dict constructor沒有一列參數,所以給人的列名懂事採取額外的步驟:

dft.columns = ['A', 'B', 'C', 'D'] 

這對於這樣一個方便(例如,用於單元測試)初始化DataFrame的方法。

所以我想知道:有沒有更好的方法?要做到這一點

回答

8

或者,您可以使用DataFrame.from_items()從您的字典中構造DataFrame;這允許您同時傳遞列名稱。

例如,如果d是你的字典:

d = {0: [50, 45, 0, 0], 
    1: [53, 48, 0, 0], 
    2: [56, 53, 0, 0], 
    3: [54, 49, 0, 0], 
    4: [53, 48, 0, 0], 
    5: [50, 45, 0, 0]} 

的數據是d.items()和東方再次'index'。這本字典的鍵成爲指數值:

>>> pd.DataFrame.from_items(d.items(), 
          orient='index', 
          columns=['A','B','C','D']) 
    A B C D 
0 50 45 0 0 
1 53 48 0 0 
2 56 53 0 0 
3 54 49 0 0 
4 53 48 0 0 
5 50 45 0 0 

在Python 2,你可以使用d.iteritems()以產生字典的內容,以避免在內存中創建另一個列表。

5

的一種方法如下:

df = pd.DataFrame.from_dict({ 
0: {"A":50, "B":40}, 
1: {"A":51, "B":30}}, orient='index') 

然而,對於快速測試初始化​​我可能會更喜歡你的路+,然後設置列。

1

你可以嘗試:

x=pd.DataFrame({0:[50,45],1:[53,48],2:[56,53]}, index=["A","B"]).transpose() 

但它仍然是奇數爲您指定的標準指數作爲你的字典鍵。

爲什麼不直接

x = pd.DataFrame({"A":[50,53,56],"B":...}) 
+0

「爲什麼不直接X = pd.DataFrame({」 A 「:[50,53,56],」 B 「:...})」?只是爲了保持初始化中的數字與df在相同的位置,正如問題所提及的那樣... – birone

+0

標準索引鍵只是佔位符,以保持示例簡單。可能我需要使用日期時間對象。 – birone