I have attached a screenshot of the excel file I am working with 我正在尝试阅读这个包含所有状态(列B),县(列C)和人口(列D)的excel文件。我想计算每个州的人口。
我知道我们都有各种各样的方法可以做到这一点,并且肯定有一种方法可以用更少的易于理解的代码来实现。我会很感激,但我也想知道如何以我想的方式做到这一点 - 首先找出唯一的州名,然后循环通过工作表来按状态添加所有列。
这是我的代码:
x = wb.get_sheet_names()
sheet = wb.get_sheet_by_name('Population by Census Tract')
PopData = {}
StateData = []
i = 3
j = 0
k=""
#First value entered
StateData.append(sheet['B' + str(2)].value)
#Unique State Values calculated
for row in range(i, sheet.max_row + 1):
if any(sheet['B' + str(row)].value in s for s in StateData):
i=i+1
else:
StateData.append(sheet['B' + str(row)].value)
print(StateData)
#Each State's Population calculated
for s in StateData:
for row in range(2, sheet.max_row + 1):
if sheet['B' + str(row)].value == StateData[s]:
j = j + sheet['D' + str(row)].value
PopData[StateData[s]] = j
print(PopData)
if sheet['B' + str(row)].value == StateData[s]:
TypeError: list indices must be integers or slices, not str
答案 0 :(得分:0)
以下内容:
for s in StateData:
for row in range(2, sheet.max_row + 1):
if sheet['B' + str(row)].value == StateData[s]:
j = j + sheet['D' + str(row)].value
PopData[StateData[s]] = j
s
已经是StateData
列表的一个元素。你想做的可能是:
for s in StateData:
for row in range(2, sheet.max_row + 1):
if sheet['B' + str(row)].value == s:
j = j + sheet['D' + str(row)].value
PopData[StateData[s]] = j
或
for i, s in enumerate(StateData):
for row in range(2, sheet.max_row + 1):
if sheet['B' + str(row)].value == StateData[i]:
j = j + sheet['D' + str(row)].value
PopData[StateData[s]] = j
但第一种选择更优雅,(可能)稍快一些。