请有人可以帮我这个,我试图找到B2:B1500的值的平均值,这是从excel提取到python环境但我卡住了。这是我到目前为止编写的代码。
wb=xl.load_workbook("J:/Data/T0444CH1.xlsx")
type(wb)
ws = wb.active
tuple(ws['B2':'B1500'])
for rowOfCellObjects in ws['B2':'B1500']:
for cellObj in rowOfCellObjects:
def avg(cellObj):
return float(sum(cellObj))/len(cellObj)
average = sum(cellObj)/len(cellObj)
这是我得到的错误
average = sum(cellObj)/len(cellObj)
TypeError: 'Cell' object is not iterable
答案 0 :(得分:1)
在这种情况下,问题是cellObj
不是Python可以汇总的列表或东西,它是一个变量。另外,另一个问题是你从未调用过你的平均函数,这与最后一行完全相同,并且也会导致相同的错误,所以你可以使用它或删除它
(我建议删除它)。
如果您仍想使用sum
功能,则可以创建所有值的列表。在这种情况下,你可以这样做:
wb=xl.load_workbook("J:/Data/T0444CH1.xlsx")
type(wb)
ws = wb.active
tuple(ws['B2':'B1500'])
#Our List Of cells
cells = []
for rowOfCellObjects in ws['B2':'B1500']:
for cellObj in rowOfCellObjects:
cells.append(cellObj)
average = sum(cells)/len(cells)
如果您只想使用变量来减少内存使用量,可以这样做:
wb=xl.load_workbook("J:/Data/T0444CH1.xlsx")
type(wb)
ws = wb.active
tuple(ws['B2':'B1500'])
#Our Totals
counter = 0
total = 0.0
for rowOfCellObjects in ws['B2':'B1500']:
for cellObj in rowOfCellObjects:
total+=float(cellObj)
counter+=1
average = total/counter
注意:我没有测试过这些解决方案。