2015-09-10 46 views
0

我已經寫了一段腳本,目前我確定可以進行濃縮。我試圖實現的是這種自動版本:追加到迭代字典中的列表

file1 = tkFileDialog.askopenfilename(title='Select the first data file') 
file2 = tkFileDialog.askopenfilename(title='Select the first data file') 
TurnDatabase = tkFileDialog.askopenfilename(title='Select the turn database file') 

headers = pd.read_csv(file1, nrows=1).columns 
data1 = pd.read_csv(file1) 
data2 = pd.read_csv(file2) 

這是如何收集數據。 還有更多的代碼行着重於挑選數據的位。我不會發布這一切。

這就是我想要凝結:

EntrySummary = [] 
for key in Entries1.viewkeys(): 
    MeanFRH = Entries1[key].hRideF.mean() 
    MeanFRHC = Entries1[key].hRideFCalc.mean() 
    MeanRRH = Entries1[key].hRideR.mean() 
# There's 30 more lines of these... 
# Then the list is updated with this: 
EntrySummary.append({'Turn Number': key, 'Avg FRH': MeanFRH, 'Avg FRHC': MeanFRHC, 'Avg RRH': MeanRRH,... # and so on}) 


EntrySummary = pd.DataFrame(EntrySummary) 
EntrySummary.index = EntrySummary['Turn Number'] 
del EntrySummary['Turn Number'] 

這是舊代碼。我一直試圖做的是這樣的:

EntrySummary = [] 

for i in headers(): 
    EntrySummary.append({'Turn Number': key, str('Avg '[i]): str('Mean'[i])}) 
    print EntrySummary 
# The print is only there for me to see if it's worked. 

但是我在一分鐘收到此錯誤:

for i in headers(): 
TypeError: 'Index' object is not callable 

任何想法,我犯了一個錯誤?我可能做了一些...

預先感謝您

奧利

+0

現在在哪裏定義'headers'? –

+0

標題與沒有更改的第一段數據相同。道歉我沒有說清楚 – OParker

+0

'print header'給你什麼? –

回答

0

如果我正確理解你的情況,你要替換的一長串任務中的「舊代碼「你已經用另一個循環顯示,它使用數據文件中的標題列表自動處理所有不同的項目。

我想這是你想要的東西:

EntrySummary = [] 
for key, value in Entries1.viewitems(): 
    entry = {"Turn Number": key} 
    for header in headers: 
     entry["Avg {}".format(header)] = getattr(value, header).mean() 
    EntrySummary.append(entry) 

你也許可以想出一些更好的變量名,因爲你知道在Entries1鍵和值是什麼(我沒有,所以我使用通用名稱)。

+0

謝謝你我會嘗試整合這個現在回到你身邊! – OParker

+0

它比我所做的要多,雖然它被抓住了頁。數據中有一列有一個是/否的值,這是錯誤:'raise TypeError('無法將%s轉換爲數字'%str(x)) TypeError:無法轉換YESYESYESYESYESYESYESYESYES'這裏有很多更多的是,但我會停在這麼多 – OParker

+0

這聽起來像你可能需要過濾'標題列表,以省略一些你不能平均的數據列。 – Blckknght