使用openpyxl统计含特定值行数并按州整理关键词
问题解决:用openpyxl统计州的提及次数并整理关键词
仅用openpyxl完全可以实现你的需求,不需要额外依赖库。你的现有代码存在两个核心问题:
- 调用
state.count('Missouri')是统计当前单个字符串里的关键词出现次数,每次匹配到自然只会输出1,没有做全局的计数累加 - 缺少存储各州对应关键词的逻辑,无法最终整理成你需要的字符串格式
下面是修正后的完整实现代码:
import openpyxl # 加载工作簿和激活工作表 path = "testExcel.xlsx" wb_object = openpyxl.load_workbook(path) sheet_object = wb_object.active row = sheet_object.max_row column = sheet_object.max_column print("Total Rows:", row) print("Total Columns:", column) # 初始化两个字典:分别存储各州的提及次数、对应关键词列表 state_count = {} state_keywords = {} # 遍历数据行(假设数据从第2行开始,若你的数据起始行不同,修改range的起始值即可) for i in range(2, row + 1): # 获取第4列的州值,按逗号分割取第一个并去除前后空格 state_cell = sheet_object.cell(row=i, column=4) if not state_cell.value: continue # 跳过空值行 state = state_cell.value.split(",")[0].strip() # 获取关键词(假设关键词在第1列,根据你的实际表格调整列号) keyword_cell = sheet_object.cell(row=i, column=1) keyword = keyword_cell.value.strip() if keyword_cell.value else "" # 累加州的提及次数 if state in state_count: state_count[state] += 1 else: state_count[state] = 1 # 收集对应州的关键词 if state in state_keywords: state_keywords[state].append(keyword) else: state_keywords[state] = [keyword] # 输出统计结果和整理后的关键词字符串 print("\n各州提及次数:") for state, count in state_count.items(): print(f"{state}: {count} 次") print("\n整理后的关键词字符串:") for state, keywords in state_keywords.items(): keyword_str = ", ".join(keywords) print(f'{state} = "{keyword_str}"') print("All good")
关键逻辑说明:
- 用
state_count字典实现全局计数累加,每次遇到对应州就将计数加1 - 用
state_keywords字典存储每个州的关键词列表,遍历过程中持续追加对应关键词 strip()方法用于去除字符串前后空格,避免因单元格内容带空格导致的匹配失败- 最后通过
", ".join(keywords)将关键词列表转换为你需要的逗号分隔字符串格式
内容的提问来源于stack exchange,提问作者KatieJRise
相关产品推荐
相关产品推荐

