2016-06-24 34 views
1

我對Python很新,我覺得這個問題相當簡單,但我無法弄清楚它...從excel數據循環到每個鍵有多個值的字典

我有一個數據表Excel中有B列字符串和C到I列作爲值。我想創建一個字典,其中對於列中的每個鍵值,我將C列的值分配給I.我計算出每行如何執行,每次執行一個,但我正在查找for循環語法在整個excel數據表中執行 。

這裏是我的代碼:

NYSE = {} 
NYSE.setdefault(sheet['B5'].value, []).append(sheet['C5'].value) 
NYSE.setdefault(sheet['B5'].value, []).append(sheet['D5'].value) 
NYSE.setdefault(sheet['B6'].value, []).append(sheet['C6'].value) 
NYSE.setdefault(sheet['B6'].value, []).append(sheet['D6'].value) 
print NYSE 

我可以手動不斷加入到這個... B7 C7,B7 D7等,但必須有辦法在功能和輸出字典迴路這一點。

+0

您可以將它轉換爲csv文件? – RoadRunner

+0

是的,我可以使用csv或xlsx文件 – Deuce525

回答

1

你可以嘗試這樣的事:

from collections import defaultdict 

d = defaultdict(list) 
for line in open("pyex.csv").readlines(): 
    line = line.strip() 
    line = line.split(",") 
    key, value = line[0], line[1:] 
    d[key] += value 
print(d) 

所以,如果你有一個CSV文件看起來像這樣。其中第一列是字符串,每列第二和之後是值:

crow 19 13 
bird 16 32 

這個代碼將輸出:

defaultdict(<class 'list'>, {'crow ': ['19', '13'], 'bird': ['16', '32']}) 

[完成了0.1秒]

這可以讓你每個鍵都有多個值,因爲這些值包含在列表中。

UPDATE:

使用setdefault代替:

d = {} 
for line in open("pyex.csv").readlines(): 
    line = line.strip() 
    line = line.split(",") 
    key = line[0] 
    for value in line[1:]: 
     d.setdefault(key, []).append(value) 
print(d) 

輸出:

{'crow': ['19', '13'], 'bird': ['16', '32']} 

甚至與CSV庫

import csv 

csv_file = open("pyex.csv") 
csv_reader = csv.reader(csv_file) 

d = {} 
for line in csv_reader: 
    key = line[0] 
    for value in line[1:]: 
     d.setdefault(key, []).append(value) 
print(d) 

正如@martineu說,你不需要defaultdicts或setdefaults:

import csv 

csv_file = open("Book1.csv") 
csv_reader = csv.reader(csv_file) 

d = {} 
for line in csv_reader: 
    key = line[0] 
    d[key] = line[1:] 
print(d) 
+0

我很快就試過了,但我得到了以下錯誤:defaultdict(,{}) – Deuce525

+0

hmmmm,如果我能看到您的csv文件,您認爲它會好嗎?我還編輯了我的答案,以適應更多的價值。 – RoadRunner

+0

我會嘗試使用'setdefault'而不是 – RoadRunner

1

你有沒有考慮過使用熊貓?我不確定你的數據目標是什麼,但它看起來像是你想要的最強大的方法。

如果您使用pandas.read_excel(path, sheetname=None)那麼它將默認創建一個字典,其中每個鍵是一個表,每個值是該表的一個數據框。然後你可以迭代你的字典來將它們合併在一起。用數據的僞樣本來獲得更具體的信息會更容易。

+0

這是否允許數據中的每一行都分配鍵和多個值?例如,B列都是鍵,C,D,E都是表中每行的值。 – Deuce525

+0

我很難想象您的數據。這些列是分散在多個需要與某個鍵相關的工作表上的,還是隻是在同一個工作表中的列?無論哪種方式,答案都是肯定的 - 數據框本質上是一種關係結構,它允許您按行和列處理數據並執行各種操作。 – Jeff

相關問題