2013-03-12 2 views
0

в моих прошлых вопросах, я заявил, что я новичок в python. Я использовал его только один раз для работы. И еще раз, есть небольшой проект, который я должен сделать для работы.Прочитайте файлы Excel и используйте только определенные файлы

Мне нужно прочитать файл excel, и в этом файле excel есть 3 столбца (col1, col2, col3). Существует около 100 строк.

col1 имеет 2 значения A и B. col2 имеет значения от ТОЛЬКО 1 - 10. col3, существует множество различных значений.

Но я хочу, чтобы моя программа python просматривала каждое отдельное значение в col1, а затем при каждом отдельном значении в col2, а затем вычисляла avg всех соответствующих значений col3.

Будем надеяться, что выход может выглядеть примерно так:

A - 1 = 2.3 
A - 2 = 6.2 
A - 3 = 5.7 
etc. etc. 
B - 1 = 3.5 
B - 2 = 4.1 
B - 3 = 8.1 
etc. etc. 

Я знаю, что это много, чтобы спросить, но я сделал это до сих пор:

import xlrd #import package 

#opening workbook and reading first sheet 
book = xlrd.open_workbook('trend.xls') 
sheet = book.sheet_by_index(0) 

#print sheet name, number of rows and columns 
#print sheet.name #print sheet name 
#print sheet.nrows #print number of rows 
#print sheet.ncols #print number of colums 

#print cellname along with value in for loop 
for row_index in range(sheet.nrows): 
    for col_index in range(sheet.ncols): 
     print xlrd.cellname(row_index,col_index),'-', 
     print sheet.cell(row_index,col_index).value 

Он начал печатать все значения в каждой ячейке вместе с именем и т. д. Но потом я понял, что он не делает то, что он действительно должен делать. И я не могу найти правильный учебник о том, как это сделать.

Если у кого-то из вас есть предложения, я буду очень этому благодарен. Спасибо огромное!

ответ

2

Попробуйте это:

import xlrd 

book = xlrd.open_workbook('trend.xls') 
sheet = book.sheet_by_index(0) 

unique_combinations = {} 

for row_index in range(sheet.nrows): 
    cell_1 = sheet.cell(row_index, 0) 
    cell_2 = sheet.cell(row_index, 1) 
    cell_3 = sheet.cell(row_index, 2) 
    unique_combo = (cell_1.value, int(cell_2.value)) 
    if unique_combinations.has_key(unique_combo): 
     unique_combinations[unique_combo].append(cell_3.value) 
    else: 
     unique_combinations[unique_combo] = [cell_3.value] 

for k in unique_combinations.keys(): 
    values = unique_combinations[k] 
    average = sum(values)/len(values) 
    print '%s - %s = %s' % (k[0], k[1], average) 
+0

Я вижу это просто выводит его. Есть ли способ сделать это как ... если эта ячейка (col1) равна строке, она начнет смотреть на col2, а затем, если это значение ячейки равно определенной строке, оно будет записывать все значения col3, который соответствует и вычисляет avg ?? – chakolatemilk

+0

Был занят редактированием - как вы отредактировали свой вопрос секунд после того, как я отправил оригинальный ответ :-) – andyhasit

+0

Подождите, я случайно набрал что-то неправильно. :) – chakolatemilk

Смежные вопросы