簡體   English   中英

如何使用xlrd從工作表列計算變量?

[英]How to calculate variables from worksheet columns using xlrd?

我試圖從Excel文檔計算給定列中特定值的所有變量。 我希望能夠遍歷列並計算每個實例的總數...例如,有多少學生獲得了成績“A”。

這是我到目前為止所擁有的......

TEST.XLS:

姓名,班級,年級

詹姆斯,數學,A

朱迪,數學,A

比爾,社會研究,B

丹尼斯,歷史,C

莎拉,歷史,B

這是我的python腳本

import xlrd
from collections import Counter
sh = xlrd.open_workbook('test.xls', on_demand = True).sheet_by_index(0) # Open workbook and sheet

 for rownum in range(sh.nrows):
    grades = str(sh.cell(rownum, 2).value) # Grab all variables in column 2.
    print Counter(grades.split('\n'))  # Count grades

預期產量:

A = 2

B = 2

C = 1

實際產量:

櫃台({'等級':1})

櫃台({'A':1})

櫃台({'A':1})

櫃台({'B':1})

計數器({'C':1})

櫃台({'B':1})

由於每個年級顯示在不同的列表中,我無法合並/連接列表以獲得總計。 它也不是所需的輸出格式。

for rownum in range(sh.nrows):
    grades = str(sh.cell(rownum, 2).value) # Grab all variables in column 2.
    print Counter(grades.split('\n'))  # Count grades

您正在每次迭代中創建一個列表。

您可以使用列表推導來創建包含所有等級的單個列表:

grades = [str(sh.cell(rownum, 2).value) for rownum in range(sh.nrows)]
print Counter(grades)

或者沒有理解:

grades = []
for rownum in range(sh.nrows):
    grades.append(str(sh.cell(rownum, 2).value))

print Counter(grades)

您仍然需要根據自己的喜好格式化Counter(grades)的內容:

res = Counter(grades)
for grade, count in res.iteritems():
    print '{} = {}'.format(grade, count) 

注意:

  1. 我沒有使用split

  2. 輸出不會以任何特定順序排列,實際上可能會在連續運行腳本之間發生變化。

您可以首先實例化一個Counter ,然后在迭代時為其添加等級:

grades_counter = Counter()
mysheet = xlrd.open_workbook('grades.xls').sheet_by_index(0)

for i in range(1,mysheet.nrows):
    grades_counter += Counter(str(mysheet.row_values(i)[2]))

print grades_counter
Counter({'A': 2, 'B': 2, 'C': 1})

如果您希望以更優雅的方式打印輸出,可以執行以下操作:

for k,v in grades_counter.items():
    print "{} = {}".format(k,v)

你應該得到:

A = 2
C = 1
B = 2

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM